表达式和运算符
1.如果不清楚运算符的优先级,最简单的办法就是使用括号来明确表明计算顺,赋值操作的优先级很低,几乎自后才被执行
2.如果”+”运算符表达式中一个是字符串,而另一个不是,则另一个会被自动转换为字符串.
如果加号运算符中一个运算数为对象,则这个对象会被转换为可以进行加法运算的数字或可以进行连接运算的字符处澳门,这一转换是通过调用该对象的valueof()或toString()方法来实现的.
3.如果”-”运算符的运算数字不是数字,那么系统会自动把它们转换为数字.
也就是说加号运算符会被有限转换为字符串,而减号运算符会被优先转换为数字.以此类推,只能进行数字运算的运算符的运算数都将被转换为数字.(比较运算符也会优先转换为数字进行比较)
4.加号运算符有将参数转换为数字的功能,如果不能转换为数字则返回NaN
如var a=”100” ; var b=+a; //此时b的值为数字100
5.递增运算符(++),只能运用于变量,如果用在变量前则为前递增运算符,如果用在变量后则为后递增运算符.前递增运算符会用递增后的值进行计算,而后递增运算符用递增前的值进行计算,如:
var a=1;
bar b=a++;//此时b的值为1,因为b的值是a递增前的值.但是a的值已经成了2
var a=1;
var b=++a;//此时b的值为2,a的值也为2
递减运算符(--)的用法与递增运算符的用法相同.
6.关于(===),要想使等式成立,需满足的条件是:
a.等式两边值相同,类型也相同.
b.如果等式两边是引用类型的变量,如数组,对象,函数,则要保证两边引用的是同一个对象,否则,及时是两个单独的完全相同的对象也不会完全相等.
c.等式两边的值都是null或undefined,但如果是NaN就不会想等.
7.关于(==),要想使等死成立,需满足的条件是:
a.等式两边类型不同,但经过自动化转化类型后的值相同,转化时如果有一边为数字,则另一边的非数字类型会优先转化为数字类型;布尔值始终是转换为数字进行比较的,不管等是两边有没有数字类型,true转换为1,false转化为0.对象也会被转换.
b.null==undefined
8.比较运算符如大于,小于等职能对数字或字符串进行比较,不是数字或字符串类型的,将被转化为数字或字符串类型.如果同时存在字符串和数字,则字符串优先转换为数字,如果不能转化为数字,则转化为NaN,此时表达式最后结果为false.如果对象可以转化为数字或字符串,则它会被优先转换为数字.如果运算数都不能被转化为数字或字符串,则结果为false.如果运算数中有一个为NaN,或被转化为了NaN,则表达式的结果总是false,当比较两个字符串时,是将逐个字符进行比较的,按照的是字符在Unicode编码集中的数字,因此字母的大小写也会对比较结果产生影响.
9.in运算符要求其左边的运算数是一个字符串或者可以被转化为字符串,右边的运算符是一个对象或数组,如果左边的值是右边对象的一个属性名,则返回true.
10.intanceof运算符要求其左边的运算数是一个对象,右边的运算数是对象类的名字,如果运算符左边的对象是右边类的一个实例,则返回true.在JS中,对象类是由构造函数定义的,所以右边的运算数应该是哟个构造函数的名字.注意,JS中所有对象都是object类的实例.
11.+运算符用于数字或字符串时,并不一定就都会转换成字符串进行连接,如:
var a=1+2+”hello”;//结果为3hello
var b=”hello”+1+2;//结果为hello12
产生这种情况的原因是+运算符是从左到右进行运算的.
12.因为(=)被定义为一个运算符,所以可以将它运用于更复杂的表达式.如:
(a=b)==0;//先把a赋值给b,在检测a的值是否为0
赋值运算符的结核性是从右向左的,因此可以这样使用:
a=b=v=d=100;//给多个变量赋同一个值
13.typeof也是一个运算符,用于返回运算数的类型,typeof也可以用括号把运算数括起来.typeof对对象和数组返回的都是object,因此他只在用来区分对象和原始数据类型时才有用.
14.delete是一个一元运算符,用来删除运算数指定的对象属性,数组元素或变量,如故删除成功则返回true,删除失败则返回false.并不是所有的属性和变量都可以删除,比如用var声明的变量就不能删除,内部的核心属性和客户端的属性也不能删除.
需要注意的是:使用delete删除一个不存在的属性时(或者说他的运算数不是属性,数组元素或变量时),奖罚怒会true.
delete影响的知识属性或变量名,并不会删除属性或变量引用的对象(如果该属性或变量是一个引用类型时)
15.void也是一个一元运算符,他会忽略他的运算符并返回undefined
版权声明:本文为博主原创文章,未经博主允许不得转载。