从JS库的使用者转变成JS的开发者——第二篇 使用对象和属性

第二篇  使用对象和属性

用点记法或括号法获取/设置/更新对象的属性

点记法相对括号法更常用一些,但是有时候只能用括号法,点记法用不了。

如:1.如果你想操作的对象属性名被储存在一个变量内。

var foobarObject = {foobar: 'Foobar is code for no code'};

var string1 = 'foo';

var string2 = 'bar';

console.log(foobarObject[string1 + string2]);

2.属性名是无效标识符时。

var myObject = {'123':'zero','class':'foo'};

// Let's see dot notation do this! Keep in mind 'class' is a keyword in JavaScript

console.log(myObject['123'], myObject['class']); // logs 'zero foo'

删除对象属性

delete 操作是唯一可以彻底删除对象的某一属性。

var foo = {bar: 'bar'};

delete foo.bar;

console.log('bar' in foo); // logs false, because bar was deleted from foo

注: delete操作不可以删除在prototype链中的属性。

对象属性的引用方法

如果你想获取一个对象属性,而这个对象并不包含这个属性,那么js会在prototype链中去找这个属性。首先它会先查找创建这个对象的构造函数,检查它的prototype,看是否存在。如果还找不到,就会继续沿着prototype链查找构建这个构造函数的构造函数,直到找到该属性或链的尽头。

因为所有prototype属性都是对象,链的尽头是Object.prototype.

hasOwnProperty 判别一个对象属性是否从prototype链继承

hasOwnProperty 只查找对象本身的属性,不查找prototype链。

in 操作判断对象是否存在某属性

in 操作不仅查找对象本身,还会查找prototype链。

列举对象属性

用for in 可以列举对象的属性。

var cody = {

age : 23,

gender : 'male'

};

for (var key in cody) { // key is a variable used to represent each property name

// avoid properties inherited from the prototype chain

if(cody.hasOwnProperty(key)) {

console.log(key); }

}

注:1. for in 返回的不仅是对象的属性,还会包含从pprototype链继承的属性。如果想单纯获取对象属性,则必须用hasOwnProperty方法。

2.获取的属性的顺序并不一定和定义时的顺序一致。

3.只返回可枚举的属性,可以用propertyIsEnumberable()判断属性是可枚举的。

宿主对象(Host Objects)与原生对象(Native Objects)

执行js脚本的环境(如浏览器)本身包含的对象叫宿主对象。宿主对象并不属于脚本语言的一部分,但是在执行时可以被调用。宿主对象的属性和方法完全取决于环境。

在浏览器中,window/head 以及它们包含的对象(除了js提供的对象)都是宿主对象。最常见的宿主对象还有操作DOM的接口window.document.

执行js的环境会提供保存js原生对象的宿主对象。

原文地址:https://www.cnblogs.com/liubingna/p/2980370.html