JS对象操作(in、instanceof、delete)运算符 图片看不了?点击切换HTTP 返回上层
对象操作运算主要是针对对象、数组、函数这 3 类复合型对象执行某种程序,设计的运算符包括 in、instanceof、delete。
如果左侧操作数不是对象,或者操作数不是类型函数,则返回 false。如果右侧操作数不是复合型对象,则将返回错误。
部分 JavaScript 内置成员和客户端成员,以及使用 var 语句声明的变量不允许删除。
归属检测
in
运算符能够检测左侧操作数是否为右侧操作数的成员。其中,左侧操作数是一个字符串,或者可以转换为字符串的表达式,右侧操作数是一个对象或数组。
示例1
下面代码使用 in 运算符检测属性 a、b、c、valueOf 是否为对象 o 的成员。1 2 3 4 5 6 7 8 9 | 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的原型属性 |
instanceof
运算符能够检测左侧的对象是否为右侧类型的示例。
示例2
下面代码使用 instanceof 检测数组 a 是否为 Array、Object 和 Function 的示例。1 2 3 4 | var a = new Array(); //定义数组 console.log(a instanceof Array); //返回 true console.log(a instanceof Object); //返回 true ,Array是Object的子类 console.log(a instanceof Function ); //返回 false |
如果左侧操作数不是对象,或者操作数不是类型函数,则返回 false。如果右侧操作数不是复合型对象,则将返回错误。
删除属性
delete
运算符能够删除指定对象的属性、数组元素或变量。如果删除操作成功,则返回 true;否则返回 false。
示例1
下面代码使用 delete 运算符删除对象 a 的属性 x。1 2 3 4 5 6 7 | 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 语句声明的变量不允许删除。
1 2 3 4 5 | 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 运算符时,要注意区分成功删除与无效操作。1 2 3 4 | var s = {}; //定义对象a console.log( delete a); //返回 false ,说明不允许删除 console.log( delete a.z); //返回 true ,说明不存在该属性 console.log( delete b); //返回 true ,说明不存在该变量 |
示例3
下面代码使用 delete 运算符,配合 in 运算符,实现对数组成员执行检测、插入、删除或更新操作。1 2 3 4 5 6 7 8 9 10 11 | 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的值 |