JavaScript 属性介绍
2015-08-14 09:20
561 查看
1. 介绍
1.1 描述
属性,特指对象的成员,不单单为'属性'(字段),也包含了方法。1.2 命名方式
属性名称可以包含英文字符、数字(不能开头)、特殊符号(如:-、_、$等等)。但一般使用纯英文字符,在特殊情况下会添加-(横杠:-webkit-、-moz- )以及 _(下划线)。
若属性名称包含了-(横杠),属性访问方式只能采用'[ ]'中括号访问:
1.3 属性的查找路径
假设读取某个对象的属性x,首先会在此对象的实例属性中查找。若没有找到,将会在此对象的原型对象中查找属性x。若原型对象也没有属性x,将继续查找这个原型对象的原型(假设原型对象含有原型),一直到找到属性x或者无原型为止。1.4 属性的分类
对象中的属性,根据是否自身的可分为自有属性和继承属性。① 自有属性:也可叫实例属性;指对象自身的属性。
② 继承属性:也可叫原型属性;指对象从原型中继承的属性。
2. 属性的访问方式
可分为 ' . '点访问方式和' [ ] '中括号方法方式 。说明:若读取一个不存在的属性,将返回undefined。若设置一个对象不存在的属性,将会向对象添加此属性。
2.1 ' . '点访问方式
语法:obj.propertyName说明:属性名称必须为一个标示符(静态字符串),不能为变量。
示例:
2.2 ' [ ] '中括号访问方式
语法:obj[propertyName]说明:属性名称可以为一个静态字符串,也可以为一个变量。若为变量,访问的属性为变量表示的值。
特点:与'.'访问方式不同,'[ ]'中括号访问方式灵活性很大:可动态访问(变量指定属性名)、可访问包含某些特殊字符的属性(如:属性名称带'-')
示例:
3. delete 删除属性
语法:delete obj.propertyName 或者 delete obj[propertyName]说明:delete只能删除对象的自有属性,不能删除继承属性。
示例:
4. 检测属性
检测对象是否包含某个属性。4.1 in 运算符
说明:判断对象是否包含某个属性,会从对象的实例属性、继承属性里进行检测。语法:propertyName in obj
返回值:
{bool} 判断对象的实例属性或继承是否包含此属性。
true:对象的实例属性或继承属性包含此属性;
false:对象的实例属性或继承属性不包含此属性。
示例:
4.2 obj.hasOwnProperty(propertyName)
说明:判断对象是否拥有一个指定名称的实例属性,不会检查继承属性。参数:
①propertyName {string} :属性名称。
语法:obj.hasOwnProperty(propertyName)
返回值:
{bool} 判断对象是否拥有一个指定名称的实例属性;此方法不会检查对象原型链中的属性。
true :属性为对象的实例属性,非继承。
false :属性不为对象的实例属性。
示例:
4.3 obj.propertyIsEnumerable(propertyName)
说明:判断指定名称的属性是否为实例属性并且是可枚举的(可用for/in循环枚举)参数:
①propertyName {string} :属性名称。
语法:obj.propertyIsEnumerable(propertyName)
返回值:
{bool} 判断属性是否为实例属性并且是可枚举的(可用for/in循环枚举),不考虑原型链中的成员。
true :属性为对象的实例属性并且是可枚举的。
false :属性不为对象的实例属性或不可枚举的。
示例:
总结
检测方式 | 语法 | 检测属性的范围 | 返回值 |
in 运算符 | propertyName in obj | 实例属性、继承属性 | {bool} true:符合条件;fasle:不符合 |
obj.hasOwnProperty(propertyName) | obj.hasOwnProperty(propertyName) | 实例属性 | {bool} true:符合条件;fasle:不符合 |
obj.propertyIsEnumerable(propertyName) | obj.propertyIsEnumerable(propertyName) | 可枚举的实例属性 | {bool} true:符合条件;fasle:不符合 |
5. 遍历属性
即遍历对象的实例属性、继承属性。5.1 for / in 语句块
说明:遍历对象可枚举的实例属性和继承属性语法:
for (p in obj) {
// p表示遍历的属性名称
}
示例:
5.2 Object.keys(obj)
说明:返回一个数组,包含对象可枚举的实例属性名称参数:
①obj {object} :实例对象
返回值:
{Array} 返回一个数组,包含对象可枚举的实例属性名称
示例:
5.3 Object.getOwnPropertyNames(obj)
说明:返回一个数组,包含对象的所有实例属性名称。包括可枚举和不可枚举的参数:
①obj {object} :实例对象
返回值:
{Array} 返回一个数组,包含对象所有实例属性名称
与Object.keys()的差别:Object.keys()只返回可枚举的实例属性,Object.getOwnPropertyNames()返回所有实例属性
示例:
总结
检测方式 | 语法 | 遍历属性的范围 | 返回值 |
for / in 语句块 | for (p in obj) { // p表示遍历的属性名称 } | 可枚举的实例属性和继承属性 | {String} 属性的名称 |
Object.keys(obj) | Object.keys(obj) | 可枚举的实例属性 | {Array} 返回一个数组,包含对象可枚举的实例属性名称 |
Object.getOwnPropertyNames(obj) | Object.getOwnPropertyNames(obj) | 包含对象的所有实例属性名称。包括可枚举和不可枚举的 | {Array} 返回一个数组,包含对象所有实例属性名称 |
6.属性描述符
分为数据属性和访问器属性;两者可相互转换,若转换后未设置enumerable和configurable特性(两类属性描述符都包含这2个特性),将默认采用转换前的值。
6.1 数据属性
说明:包含属性的操作特性;如:设置值、是否可枚举等等特性名称 | 描述 | 默认值 |
value | 设置属性的值 | undefined |
writable | 是否可修改属性的值;true:可修改属性的值;false:不可修改属性的值 | false |
enumerable | 是否可枚举属性;true:可枚举,可通过for/in语句枚举属性;false:不可枚举 | false |
configurable | 是否可修改属性的特性;true:可修改属性的特性(如把writable从false改为true);false:不可修改属性的特性 | false |
1)在使用Object.defineProperty、Object.defineProperties 或 Object.create 函数的情况下添加数据属性,writable、enumerable和configurable默认值为false。
2)使用对象直接量创建的属性,writable、enumerable和configurable特性默认为true。
示例:
6.2 访问器属性
说明:设置属性的访问方式;set、get特性等特性名称 | 描述 | 默认值 |
get | 属性的返回值函数 | undefined |
set | 属性的设置值函数;含有一个赋值参数 | undefined |
enumerable | 是否可枚举属性;true:可枚举,可通过for/in语句枚举属性;false:不可枚举 | false |
configurable | 是否可修改属性的特性;true:可修改属性的特性(如把writable从false改为true);false:不可修改属性的特性 | false |
相关文章推荐
- avalon js实现仿微博拖动图片排序
- javascript实现显示和隐藏div方法汇总
- javascript运算符及优先级
- js-延迟处理函数
- javascript实现页面倒计时跳转
- JavaScript 32位整型无符号操作
- JavaScript基础教程
- Javascript DOM编程艺术(第2版) -- 读书笔记(一)
- js 操作select和option常见用法
- js基础4
- 用javascript在客户端删除某一个cookie键值对
- javascript实现显示和隐藏div方法汇总
- js实现选中复选框文字变色的方法
- js实现Select列表各项上移和下移的方法
- JavaScript实现给按钮加上双重动作的方法
- JavaScript变量的作用域全解析
- JS实现双击编辑可修改状态的方法
- JavaScript中的this关键字使用详解
- js实现表单检测及表单提示的方法
- 关于JavaScript的变量的数据类型的判断方法