JavaScript基础之对象属性的检测和枚举
属性检测
对象作为属性的集合,属性又包括自有属性和继承属性;
检测方法:
\__ in运算符:
\__ var obj = { x:1 }
console.log( 'toString' in obj ) // true # 检测继承属性,继承自Object.prototype这一原型
console.log( 'x' in obj ) // true #检测自有属性
\__ hasOwnProperty:
\__ var obj = { x:1 }
console.log( obj.hasOwnProperty( 'toString' ) ) // false # 检测继承属性失败
console.log( obj.hasOwnProperty( 'x' ) ) // true #检测自有属性
\__ propertyIsEnumerable:
\__ var obj = { x:1 }
console.log( obj.propertyIsEnumerable( 'toString' ) ) // false # 检测继承属性失败
console.log( obj.propertyIsEnumerable( 'x' ) ) // true #检测自有属性,且是显式属性
结论:in运算不仅可以检测自有属性,还可以检测继承属性,其余两种方法仅能检测自有属性,它们之间的区别又由 存取器属性 来界定,暂且不谈
对象的自有属性可以被枚举,如果要设置不可枚举可使用存取器属性。
枚举方法:
\__ for/in:
\__ var obj = { x : 1 , y : 2 }
obj.propertyIsEnumerable( 'toString' ) // false #不可枚举,ES5标准赋予
console.log( 'toString' in obj ) //true #注意,for/in搭配起来用属性的可枚举特性才会生效
for ( key in obj )
console.log( key ) // x , y
最新文章
- Hive on Spark安装配置详解(都是坑啊)
- Nlog 记录日志到 sqlite
- jsonp 实现sso
- Troubleshoot Refused VNC Connection in CentOS 7
- firefox与chrome中对select下拉框中的option支持问题
- Python 基础【第一篇】环境部署
- LeetCode_Palindrome Partitioning II
- boost参考博客
- Gym100814B Gym100814F Gym100814I(异或) ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (2015) Arab Academy for Science and Technology
- postman模拟HttpPost请求的方法
- ACM Secrete Master Plan
- java记事本开发
- keepalived.conf配置说明
- [java]创建一个默认TreeMap() key为什么不能为null
- 用javascript写原生ajax(笔记)
- LuoGu P1939 【模板】矩阵加速(数列)
- 【性能提升神器】STRAIGHT_JOIN
- exe4j中";this executable was created with an evaluation version exe4j";的解决
- Android sharedUserId 和系统权限
- [py]类和实例方法/内建方法