js对象操作运算符(in,instanceof,delete)

4 篇文章 0 订阅

1.归属检测in

in运算符能够检测左侧操作数是否为右侧操作数的成员。其中,左侧操作数是一个字符串,或者可以转换为字符串的表达式,右侧操作数是一个对象或数组。

注意:无法检测数组(结果都为false),本来也就没有必要检测,用indexOf不香吗?

//in运算符可以检测到原型上的属性

var o = {  //定义对象
    a : 1,  //定义属性a
    b : function() {}  //定义方法b
}
console.log("a" in o);  //返回true
console.log("b" in o);  //返回true
console.log("c" in o);  //返回false
console.log("valueOf" in o);  //返回true,继承Object的原型方法
console.log("constructor" in o);  //返回true,继承Object的原型属性

2.检验复杂型数据类型instanceof

该运算符能够检测左侧的对象是否为右侧类型的示例

//下面代码使用 instanceof 检测数组 a 是否为 Array、Object 和 Function 的示例。
var a = new Array();  //定义数组
console.log(a instanceof Array);  //返回true
console.log(a instanceof Object);  //返回true,Array是Object的子类
console.log(a instanceof Function);  //返回false

3.删除属性delete

运算符能够删除指定对象的属性、数组元素或变量。如果删除操作成功,则返回 true;否则返回 false。

示例1

//下面代码使用 delete 运算符删除对象 a 的属性 x

var a = {  //定义对象a
    x : 1,  //定义对象成员
    y : 2  //定义对象成员
};
console.log(a.x);  //调用对象成员,返回1
console.log(delete a.x);  //删除对象成员x成功,返回true
console.log(a.x);  //返回undefined,没有找到该对象成员

//部分 JavaScript 内置成员和客户端成员,以及使用 var 语句声明的变量不允许删除。

c = 1;  //初始化变量c,没有使用var语句声明
console.log(delete c);  //返回true,说明删除成功
var b = 1;  //使用var语句声明并初始化变量
console.log(delete b);  //返回false,说明不允许删除
console.log(delete Object.constructor);  //返回true,说明部分内部成员可以被删除

示例2

如果删除不存在的对象成员、数组元素、变量,则返回 true。因此,使用 delete 运算符时,要注意区分成功删除与无效操作。

var s = {};  //定义对象a
console.log(delete a);  //返回false,说明不允许删除
console.log(delete a.z);  //返回true,说明不存在该属性
console.log(delete b);  //返回true,说明不存在该变量

示例3

下面代码使用 delete 运算符,配合 in 运算符,实现对数组成员执行检测、插入、删除或更新操作。

该例子有点奇怪:

输出的结果是 [  "x":false  ],这样的数组我也是第一次见。

var a = [];  //定义数组对象
if("x" in a){  //如果对象a中存在x 
    delete a["x"];  //则删除成员x
}else{  //如果不存在成员x
    a["x"] = true;  //则插入成员x,并为其赋值true
}
console.log(a.x);  //返回true。查看成员x的值
if(delete a["x"]){  //如果删除成员x成功
    a["x"] = false;  //更新成员x的值为false
}
console.log(a.x);  //返回false。查看成员x的值

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值