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

浙公网安备 33010602011771号