http://www.w3school.com.cn/jsref/jsref_obj_string.asp3.布尔类型
布尔类型仅包含真假,与Python不同的是其首字母小写。varx=true
vary=false
4.数组
JavaScript中的数组类似于Python中的列表创建数组#方式1
varcars=newArray();
cars[0]="Audi";
cars[1]="BMW";
cars[2]="Volvo";
#方式2
varcars=newArray("Audi","BMW","Volvo");
#方式3
varcars=["Audi","BMW","Volvo"];
常用方法obj.length数组的大小obj.push(ele)尾部追加元素obj.pop()尾部获取一个元素obj.unshift(ele)头部插入元素obj.shift()头部移除元素obj.splice(start,deleteCount,value,...)插入、删除或替换数组的元素obj.splice(n,0,val)指定位置插入元素
obj.splice(n,1,val)指定位置替换元素
obj.splice(n,1)指定位置删除元素
obj.slice()切片obj.reverse()反转obj.join(sep)将数组元素连接起来以构建一个字符串obj.concat(val,..)连接数组obj.sort()对数组元素进行排序5.运算和比较
算术运算符 | 运算符 | 描述 | 实例 |
---|
+ | 加-两个对象相加 | a+b输出结果30 |
- | 减-得到负数或是一个数减去另一个数 | a-b输出结果-10 |
* | 乘-两个数相乘或是返回一个被重复若干次的字符串 | a*b输出结果200 |
/ | 除-x除以y | b/a输出结果2 |
% | 取模-返回除法的余数 | b%a输出结果0 |
** | 幂-返回x的y次幂 | a**b为10的20次方,输出结果100000000000000000000 |
// | 取整除-返回商的整数部分 | 9//2输出结果4,9.0//2.0输出结果4.0 |
比较运算符 | 运算符 | 描述 | 实例 |
---|
== | 等于 | a==b返回false。 |
=== | 全等于(值和类型) | a==b返回false。 |
!= | 不等于 | a!=b返回true. |
> | 大于-返回x是否大于y | (a>b)返回false。 |
< | 小于-返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。(a<b)返回true。 | |
>= | 大于等于-返回x是否大于等于y。 | (a>=b)返回False。 |
<= | 小于等于-返回x是否小于等于y。 | (a<=b)返回true。 |
赋值运算符 | 运算符 | 描述 | 实例 |
---|
= | 简单的赋值运算符 | c=a+b将a+b的运算结果赋值为c |
+= | 加法赋值运算符 | c+=a等效于c=c+a |
-= | 减法赋值运算符 | c-=a等效于c=c-a |
*= | 乘法赋值运算符 | c*=a等效于c=c*a |
/= | 除法赋值运算符 | c/=a等效于c=c/a |
%= | 取模赋值运算符 | c%=a等效于c=c%a |
**= | 幂赋值运算符 | c**=a等效于c=c**a |
//= | 取整除赋值运算符 | c//=a等效于c=c//a |
逻辑运算符 | 运算符 | 描述 | 例子 |
---|
&& | and | (x<10&&y>1)为true |
|| | or | (x==5||y==5)为false |
! | not | !(x==y)为true |
6.字典
javascript没有字典的概念,此时称之为JavaScript对象对象由花括号分隔。在括号内部,对象的属性以名称和值对的形式(name:value)来定义。属性由逗号分隔:varobj={key1:"value1",key2:"value2"};
上面例子中的对象(obj)有两个属性key1key2获取属性值:obj.key1
obj.key2
或者
obj['key1']
obj['key2']
7.特殊值:Undefined和Null
null是JavaScript语言的关键字,它表示一个特殊值,常用来描述“空值”。undefined是一个特殊值,表示变量未定义。其它
1.序列化
JSON.stringify(obj)序列化JSON.parse(str)反序列化varobj={key1:"value1",key2:"value2"};
varstr='{"k1":"v1","k2":"v2"}';
vars1=JSON.stringify(obj);
vars2=JSON.parse(str);
document.write("原字典:"+obj+"<br>");
document.write("原字符串:"+str+"<br>");
document.write("序列化:"+s1+"<br>");
document.write("反序列化:"+s2+"<br>");
效果:原字典:[objectObject]
原字符串:{"k1":"v1","k2":"v2"}
序列化:{"key1":"value1","key2":"value2"}
反序列化:[objectObject]
2.转义
decodeURI()URl中未转义的字符decodeURIComponent()URI组件中的未转义字符encodeURI()URI中的转义字符encodeURIComponent()转义URI组件中的字符escape()对字符串转义unescape()给转义字符串解码URIError由URl的编码和解码方法抛出varurl="https://www.sogou.com/web?query=宝强";varret=encodeURI(url);varret2=decodeURI(ret);varret3=encodeURIComponent(url);varret4=decodeURIComponent(ret3);document.write("url:"+url+"<br>");document.write("encodeURI结果:"+ret+"<br>");document.write("decodeURI结果:"+ret2+"<br>");document.write("encodeURIComponent结果:"+ret3+"<br>");document.write("decodeURIComponent结果:"+ret4+"<br>");varstr="宝强";vars1=escape(str);vars2=unescape(s1);document.write("str:"+str+"<br>")document.write("escape结果:"+s1+"<br>")document.write("unescape结果:"+s2+"<br>")
结果:url:https://www.sogou.com/web?query=宝强encodeURI结果:https://www.sogou.com/web?query=%E5%AE%9D%E5%BC%BAdecodeURI结果:https://www.sogou.com/web?query=宝强encodeURIComponent结果:https%3A%2F%2Fwww.sogou.com%2Fweb%3Fquery%3D%E5%AE%9D%E5%BC%BA
decodeURIComponent结果:https://www.sogou.com/web?query=宝强str:宝强
escape结果:%u5B9D%u5F3A
unescape结果:宝强
3.eval
JavaScript中的eval是Python中eval和exec的合集,既可以编译代码也可以获取返回值。eval()EvalError执行字符串中的JavaScript代码varres=eval(1+2+22/4*3)eval("vartest='fuzj'")document.write(res+"<br>")document.write(test+"<br>")效果19.5fuzj
4.时间处理
Date对象Date对象用于处理日期和时间。创建Date对象的语法:varmyDate=newDate()
注释:Date对象会自动把当前日期和时间保存为其初始值。
Date对象方法Date()返回当日的日期和时间。getDate()从Date对象返回一个月中的某一天(1~31)。getDay()从Date对象返回一周中的某一天(0~6)。getMonth()从Date对象返回月份(0~11)。getFullYear()从Date对象以四位数字返回年份。getYear()请使用getFullYear()方法代替。getHours()返回Date对象的小时(0~23)。getMinutes()返回Date对象的分钟(0~59)。getSeconds()返回Date对象的秒数(0~59)。getMilliseconds()返回Date对象的毫秒(0~999)。getTime()返回1970年1月1日至今的毫秒数。getTimezoneOffset()返回本地时间与格林威治标准时间(GMT)的分钟差。getUTCDate()根据世界时从Date对象返回月中的一天(1~31)。getUTCDay()根据世界时从Date对象返回周中的一天(0~6)。getUTCMonth()根据世界时从Date对象返回月份(0~11)。getUTCFullYear()根据世界时从Date对象返回四位数的年份。getUTCHours()根据世界时返回Date对象的小时(0~23)。getUTCMinutes()根据世界时返回Date对象的分钟(0~59)。getUTCSeconds()根据世界时返回Date对象的秒钟(0~59)。getUTCMilliseconds()根据世界时返回Date对象的毫秒(0~999)。parse()返回1970年1月1日午夜到指定日期(字符串)的毫秒数。setDate()设置Date对象中月的某一天(1~31)。setMonth()设置Date对象中月份(0~11)。setFullYear()设置Date对象中的年份(四位数字)。setYear()请使用setFullYear()方法代替。setHours()设置Date对象中的小时(0~23)。setMinutes()设置Date对象中的分钟(0~59)。setSeconds()设置Date对象中的秒钟(0~59)。setMilliseconds()设置Date对象中的毫秒(0~999)。setTime()以毫秒设置Date对象。setUTCDate()根据世界时设置Date对象中月份的一天(1~31)。setUTCMonth()根据世界时设置Date对象中的月份(0~11)。setUTCFullYear()根据世界时设置Date对象中的年份(四位数字)。setUTCHours()根据世界时设置Date对象中的小时(0~23)。setUTCMinutes()根据世界时设置Date对象中的分钟(0~59)。setUTCSeconds()根据世界时设置Date对象中的秒钟(0~59)。setUTCMilliseconds()根据世界时设置Date对象中的毫秒(0~999)。toSource()返回该对象的源代码。toString()把Date对象转换为字符串。toTimeString()把Date对象的时间部分转换为字符串。toDateString()把Date对象的日期部分转换为字符串。toGMTString()请使用toUTCString()方法代替。toUTCString()根据世界时,把Date对象转换为字符串。toLocaleString()根据本地时间格式,把Date对象转换为字符串。toLocaleTimeString()根据本地时间格式,把Date对象的时间部分转换为字符串。toLocaleDateString()根据本地时间格式,把Date对象的日期部分转换为字符串。UTC()根据世界时返回1970年1月1日到指定日期的毫秒数。valueOf()返回Date对象的原始值。使用方法d=newDate();x=d.getDay();day=d.getDate();day1=d.getUTCHours();new_day=d.setMinutes(d.getMinutes()+60)document.write(d+"<br>");document.write(x+"<br>");document.write(day+"<br>");document.write(day1+"<br>");document.write(new_day+"<br>");
循环、判断和异常处理
1.条件语句判断
if语句if(条件){}elseif(条件){}else{}如:vara=1;varb=2;if(a==b){document.write("a=b");}else{document.write("a!=b")}
switch语句switch(name){case'1':age=123;break;case'2':age=456;break;default:age=777;}如:varname='1'switch(name){case'1':age=123;break;case'2':age=456;break;default:age=777;}document.write(age)
2.循环语句
for循环varnames=["alex","tony","rain"];for(vari=0;i<names.length;i++){console.log(i);console.log(names[i]);}varnames=["alex","tony","rain"];for(varindexinnames){console.log(index);console.log(names[index]);}while循环while(条件){//break;//continue;}
3.异常处理
try{//这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行}catch(e){//如果try代码块中抛出了异常,catch代码块中的代码就会被执行。//e是一个局部变量,用来指向Error对象或者其他抛出的对象}finally{//无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。}thrownewError("异常内容")主动抛出异常
函数和面向对象
1.基本函数
JavaScript中函数基本上可以分为一下三类:普通函数functionfunc(arg){returntrue;}使用:functionf1(a,b){varret=a+breturnret}res=f1(10,2)document.write(res)//结果:12
匿名函数varfunc=function(arg){return"tony";}使用:vartest=function(){return100}document.write(test())
自执行函数(function(arg){console.log(arg);})('123')使用:(function(arg){document.write(arg)})("自制行")//这里创建了一个匿名函数(在第一个括号内),第二个括号用于调用该匿名函数,并传入参数。
2.作用域
JavaScript中无块级作用域functionf1(){if(1==1){vartest=123}document.write(test)//无报错}f1()补充:标题之所以添加双引号是因为JavaScript6中新引入了let关键字,用于指定变量属于块级作用域
javascript的作用域是函数javascript和python一样,是以函数来区分变量的作用域,每个函数作为一个作用域,在外部无法访问内部作用域中的变量。functionf1(){if(1==1){vartest=123}document.write(test)//无报错}f1()document.write(test)//报错
JavaScript的作用域链由于JavaScript中的每个函数作为一个作用域,如果出现函数嵌套函数,则就会出现作用域链。varname='fuzj';functionf1(){varname='f1';functionf2(){varname='f2';document.write(name)}f2()}f1()结果为:f2
如上述代码则出现三个作用域组成的作用域链,如果出现作用域链后,那么寻找变量时候就会出现顺序,对于上述实例:当执行document.write(name)时,其寻找顺序为根据作用域链从内到外的优先级寻找,如果内层没有就逐步向上找,直到没找到抛出异常JavaScript的作用域链执行前已创建JavaScript的作用域在被执行之前已经创建,日后再去执行时只需要按照作用域链去寻找即可。示例1:varname='fuzj';functionf1(){varname='f1';functionf2(){document.write(name)}returnf2}res=f1()res()结果:f1
由于作用域在浏览器解释js的时候已经创建,所以在执行res()时,name的作用域链为:全局作用域->f1函数作用域->f2函数作用域,所以执行res()时,会从已创建好的作用域链中开始查找。查询顺序为:f2函数作用域->f1函数作用域->全局作用域示例2:varname='fuzj';functionf1(){varname='f1';functionf2(){document.write(name)}varname='newf1'returnf2}res=f1()res()结果:newf1
述代码和示例一的目的相同,也是强调在函数被调用之前作用域链已经存在,不同的时,在执行res=f1()时,f1作用域中的name变量的值已经由“f1”被重置为“newf1”,所以之后再执行res()时,就只能找到“newf1”。示例3:varname='fuzj';functionf2(){document.write(name);};functionf1(){varname='f1';returnf2};res=f1()res()结果:fuzj
述代码,在函数被执行之前已经创建了两条作用域链:全局作用域->f1函数作用域全局作用域->f2函数作用域当执行res()时,res代指的f2函数,而f2函数的作用域链已经存在:全局作用域->f2函数作用域,所以,执行时会根据已经存在的作用域链去寻找。声明提前在JavaScript中如果不创建变量,直接去使用,则报错:JavaScript中如果创建值而不赋值,则该值为undefined,如:
console.log(xxoo);
console.log(xxoo);//报错:UncaughtReferenceError:xxooisnotdefined
//输出:undefined
在函数内如果这么写:console.log(xo);varxo='seven';}Foo();//输出:undefined
上述代码,不报错而是输出undefined,其原因是:JavaScript的函数在被执行之前,会将其中的变量全部声明,而不赋值。所以,相当于上述实例中,函数在“预编译”时,已经执行了varxo;所以上述代码中输出的是undefined。3.闭包
闭包的含义:闭包说白了就是函数的嵌套,内层的函数可以使用外层函数的所有变量,即使外层函数已经执行完毕。由于作用域链只能从内向外找,默认外部无法获取函数内部变量functionf2(){vararg=[11,22];functionf3(){returnarg;}returnf3;}ret=f2();ret();
4.面向对象
对于上述代码需要注意:Foo充当的构造函数this代指对象创建对象时需要使用new上述代码中每个对象中均保存了一个相同的Func函数,从而浪费内存。使用原型和可以解决该问题:functionFoo(name,age){this.Name=name;this.Age=age;}Foo.prototype={GetInfo:function(){returnthis.Name+this.Age},Func:function(arg){returnthis.Name+arg;}}