您的位置:首页 > Web前端 > JavaScript

js杂七杂八细节--运算符

2014-03-11 16:35 148 查看
   转自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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: