转自http://www.cnblogs.com/lucas/archive/2009/04/05/1429890.html
一.对object采用‘+’运算符,object对象首先调用valueOf()返回简单值,之后如果两个操作数都是number对象,则采取算数相加,
否则再调用toString()方法,采用字符串连接
二.在js中,所有Number对象都以浮点数格式存储。-(一元),-(二元),+(一元),+(二元)*,/,%运用于非数字类型操作数时,都会尝
试将其转化为数字。非0数除以0返回+(-)infinity.0/0返回NaN.
三.求余符号(%)的运算结果的符号(正负号)与第一个操作数相同。它不仅适用于整型,而且适用于浮点型。如:-4.3%2.1=-0.1
四.==(Equality)和===(Identity)
4.1 number,string和boolean是通过值比较的,只要值相同就返回true
4.2 Object,Array和Function是通过引用比较的,只有指向同一对象的两个变量才相等,各自的两个Array,即包含相同的元素,对
==和===来说都不可能相等
五.===(Identity)
5.1 NaN不与任何值唯一相等,即使是它本身,可以用全局方法isNaN(),判断变量是否为NaN
5.2 两个null或两个undefined都是唯一相等的
六.==(Equality)
6.1 如果两个操作数类型相同,比较规则和===是一样的
6.2 如果两个操作数类型不同,将按以下规则转换后进行比较
6.2.1 null==undefined返回true
6.2.2 一个number和一个string,先将string转换成number后再比较
6.2.3 如果其中一个是true,则将其转换为1再比较,如果其中一个是false,则将其转换为0再比较
6.2.4 一个object和一个number或string比较时,先将object转化为简单类型再比较。除了Date的其他内置类对象,都先调用
valueOf(),必要时再调用toString()方法,而Date只调用toString()
七.<、<=、>、>=
7.1 以上关系运算符只能应用于数字和字符串
7.2 当一个数字和一个字符串比较时,尝试将字符串转化为数字
7.3 与NaN的比较都返回false
7.4 字符串的比较是逐字符比较的,而且大小写敏感
八. in
in 左边必须是一个字符串或可以转化为字符串的变量,右边必须是一个object,当左边字符串是右边对象的一个属性名时返回true.
比如:var cat = { age: 3 }; var isHasAge = 'age' in cat; // return true
九.instanceof
instanceof左边必须是一个对象,右边必须是一个类型。当左边对象是右边类的一个实例时返回true
注意:所有对象都是object实例
比如:var d = new Date(); var isInstance = d instanceof Date; // return true
十.&&
如果将逻辑与运算符用在判断真假上,与其他强类型语言是没什么不同的。js的&&运算符在返回值上值得注意。
第一个操作数为假或可以转换为假时,表达式返回第一个操作数的值,而不是返回false.
第一个操作数为真或可以转换为真时,返回第二个操作数的值。
var i = 0;
var x = (i++ && false);
alert(x);
alert(typeof x);
十一.||
同样,逻辑或在返回值上也与其他强类型语言不同。
第一个操作数为真或可以转换为真时,表达式返回第一个操作数的值,而不是返回 true。
第一个操作数为假或可以转换为假时,表达式返回第二个操作数的值,而不论第二个操作数经过转换后是不是为假。
十二.typeof
typeof其实是一个运算符(operator),他返回变量,属性或数组元素的内置类型。它有两种语法
1.typeof x
2.typeof(x) 更像是一个函数
注意: typeof null 的结果是: 'object'
在用 for/in 迭代对象属性时,JS认为属性和方法都是对象的属性,这时你可以用 typeof 访问属性,如果是方法会返回 'function'
十三.delete
delete用于删除对象属性,数组元素或变量。删除成功时返回true,否则返回false
有些属性或变量是不允许删除的,比如内置对象,用var显示声明的对象不可以被删除,但没用var声明的变量可以删除。当操作数不存在时
(比如要删除的属性或是变量),delete返回true
注意:对象属性也是对象类型。delete删除的只是属性,而不会删除属性所引用的对象,换句话说,只是删除属性名。js中的内存管理是由垃圾
回收作统一管理的
var obj =
{
x: new Date(),
y: function() { }
};
var result = delete obj.y;
alert(result); // true, 删除成功时返回 true
alert(typeof obj.y); // undefined, 已被删除的对象属性
result = delete undefined; // undefined 其实是一个全局属性
alert(result); // false, 内置的属性不允许被删除
var x = 0;
alert(delete x); // false, 用var显式声明的变量不允许被删除
alert(x); // 0, 变量依然存在,没被删除
alert(delete obj.z); // true, 删除不存在的属性时返回 true
alert(delete a); // true, 删除不存在的变量时返回 true
obj.date = obj.x;
alert(delete obj.x); // true
alert(obj.date.getFullYear()); // 2009