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申明的变量。