一些特殊运算符的理解

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权威指南,自己总结






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值