犀牛书笔记:(7)Expressions and Operators
加号:
如果一个操作数是字符串,加号的另一个操作数将被转换成字符串。对于数字或字符串的转换,调用valueOf()/toString()方法
?
减号
如果是非数字操作数,将试图将其转换成数字
?
乘号
如果是非数字操作数,将试图将其转换成数字
?
除号
如果是非数字操作数,将试图将其转换成数字。JS的除法是浮点的,和JAVA不同
?
取模(%)
如果是非数字操作数,将试图将其转换成数字
?
Equality(==) and Identity(===)
===相比==,检查更严格
===来自于ECMAScript v3/JavaScript 1.3之后。
?
在进行值比较的情况下,==和===的行为是一致的,即比较两个值是否是一样的
?
?
?
===比较的规则如下
1. 如果两个值属于不同的类型,不相等(not identical)
2. 如果两个值都是number,并且拥有相同的值,那么是相等的。除非两个值都是NaN.
?
alert( NaN===NaN);//返回false?
? ? NaN从不和任何值相等。要检验一个值是否是NaN,使用isNaN()函数。
?
3. 如果两个值都是string,并且包含同样的字符序列,是identical。
4. 如果两个值都是boolean,这个简单
5. 如果两个引用指向同一对象,相等。否则不等
6. 如果两个引用都为null或者undefined,相等。
?
==笔记爱哦的规则如下:
1. 如果两个值有相同类型,测试identity, 如果identical,就相等(equal)。否则不等
?
2. 如果两个值类型不同,仍有可能相等。
如果一个值为null,另一个值为undefined,相等。
var a = null;
var b;alert( a == b);//返回true?
??如果一个值为number,另一个为string,将string转换成数字,再比较。
var a = 3;
var b = "3";alert( a == b);//true
?如果两个值都为true,转换成1,再比较,如果两个值是false,转换成0再比较。
?
如果两个值中一个是对象,另一个是number/string, 将对象转换成元数据后再比较。除了Date()对象外,对象转换成元对象的顺序是先valueOf()后toString().Date()直接使用toString()。
其他任何比较都是不相等的
?
?
大于小于比较:
如果一个操作数是或者被转换成string,另一个操作数是或者转换成number,将被转换成number进行比较。
如果一个操作数既可以转换成number又可以转换成string,JS进行numerical转换。
如果某个操作数转换不成功,返回false.
?
In 操作符
左边操作数是字符串或者可以被转换成字符串,右边操作数是对象
如果左边的值是右边对象的一个属性,那么返回true,否则返回false.
?
var a = {x:3,y:4};alert( "x" in a);//true?
instanceof操作符
左边操作数是一个对象,右边操作数是一个对象的类名
如果左边操作数是右边的一个实例,返回true。
在JS中,CLASS名是由构造该对象的构造函数名字来表示的。
?
&&
JS也有短路
?
typeof操作符
typeof xxxx 或 typeof(xxx)
对于所有对象都只返回object,所以只能用于区分对象和非对象
?
new操作符
new操作符,创建一个新的对象,并调用后面的构造函数对它进行初始化。
Constructor must be an expression that evaluates to a constructor function
当构造器没有参数时,后面的括号可以省略:
var a = new Object;
?
new操作先创建一个新的对象,该对象没有任何属性。然后调用指定的构造函数,构造函数通过this关键字引用到刚创建的对象,然后对其进行初始化。
?
delete操作符
delete操作符用于删除函数属性,数组元素或者变量。如果删除成功,则返回true.
不是所有的变量和属性都可以删除的,一些build-in core和client-side属性不能删除。
?
void操作符
忽略操作数的值,并返回undefined。常见用法是:
?
<a href="javascript:void window.open();">Open New Window</a>
?
[]操作符
可以和.一样访问对象属性
当对象是associative array时,.操作符将不能访问其属性,只有使用[]操作符
?
?
?
?
?
?
?
?