学习js权威指南第二站 ---- 表达式与运算符

1.in运算符

  判断右操作符(对象)中是否拥有左操作符数值的属性名。

2.instanceof 运算符

  判断左操作符(对象)是不是右操作符(类)的实例:为了计算表达式o instanceof f,首先计算f.prototype,然后在原型链里面找o,如果找到那么o是f(f的父类)的实例。

  但是在某些特定的时候(iframe) instanceof不能准确的判断出array,那么可以用如下方法:

Object.prototype.toString.call(arr)  //若arr是数组,则返回[object Array],是对象则返回[object Object]

  js模仿instanceof:

  _instanceof (a,B){
        //将B类的显示原型定义成p,a实例的隐式原型定义成_p
        let p=B.prototype, _p=a.__proto__;
        while(true){
            //当循环至最顶层的时候_p的值为null,也就是在原型链中并没有找到与p相匹配的
            if(_p === null){
                return false;
            }
            //找到了
            if(_p === p){
                return true;
            }
            //没找到的时候原型链往上一层
            _p = _p.__proto__;
        }
    } 

3.eval()是函数 但是被当成运算符对待了

  如果参数不是字符串,直接返回改参数,如果参数是字符串,会当成js代码进行编译。它使用了调用它的变量的作用域环境。

    var aaa = eval;
    var x="hello",y='hello';
    function f() {
        var x="hi";
        // 改变了函数内的x
        eval("x += 'change';");
        return x;
    }
    function g() {
        var y="hi";
        // 改变了函数外的y
        aaa("y += 'change';");
        return y;
    }
    console.log(f(),x)  //hichange hello
    console.log(g(),y)  //hi hellochange

4.typeof 运算符

5.delete 运算符

  用来删除对象属性或者数组元素。delete 不能删除用var申明的变量。

猜你喜欢

转载自www.cnblogs.com/zhongxy/p/9132908.html