一些特殊运算符的理解

    xiaoxiao2021-03-25  107

    1、in    

     eg:x in o     (检测o对象是否拥有x属性)

    in 运算符(in的左侧是字符串或者可以转为字符串  ,右侧是对象 )

    *可以检测继承的属性

    *注意的是对数组检测的是下标值

    2、instanceof   (左侧是对象,右侧是标识对象的类即构造函数)

    * 如果左侧不是对象则返回false,右侧不是函数则抛出一个类型错误异常 * 返回的类型有:String Number Boolean Function Object Array Date  ,只能返回new的对象的类型,不能返回直接量的类型 3、eval() (解释运行js源代码组成的字符串)

    其实eval()是一个函数也是一个运算符,它作为函数来讲,缺点是1、动态执行的代码是不能分析的,就是说解释器不能对调用了eval()的函数进行优化;2、它可以被赋予其他的名字,即var a = eval;这样解释器也无法优化调用a()的函数,所以ES3规定任何解释器都不允许对eval()赋予别名,如果eval()函数通过别名调用的话会抛异常EvalError。但ES5是反对EvalError的,所以ES5规定直接使用eval()的,总是在调用它的上下文作用域内执行,如果给eval赋予其他名字然后再调用的话,作用的是全局对象,并且无法读写、定义局部变量和函数

    eg:function fun(){ var sd = eval; var x =2; sd("x = 4;");

    console.log(x); //2 } fun(); console.log(x);  //4    sd("x = 4;");相当于隐式定义了全局x并赋值为4

    *ES5严格模式下,不可以给eval赋予其他名字并将eval列为保留字,并且局部环境中也只能查询和修改局部变量,不能新定义变量或函数

    *IE9之前的版本调用eval的别名时,不会操作全局的对象,仅仅当做局部的eval()调用,并且也不会抛异常,但是IE定义了一个execScript()全局函 数来完成全局eval()的功能,不同的是execScript()总是返回null

    eval()只接受一个参数,这个参数要不是字符串的话,它会直接返回这个参数,否则就把字符串当成js代码进行编译,编译成功的话会返回字符串中的最后一个表达式或语句的值,没有值的话就返回undefined,编译失败的话会抛出语法异常(SyntaxError)

    eval()的作用域环境和调用它的变量是一样的,它在局部环境中调用就会影响局部变量的值,在全局环境中调用就会影响全局变量的值

    4、typeof x      x可以是任意类型的操作数

    它只能返回    'undefined' “string” 'number' 'boolean'  'function'  'object'  不能具体细分object,并且对于null会返回object

    参考js权威指南,自己总结

    转载请注明原文地址: https://ju.6miu.com/read-4223.html

    最新回复(0)