《JavaScript语言精粹》—— 对象篇

二、对象

(1) 对象字面量

对象字面量提供了一种非常方便地创建新对象值得表示法。对象字面量出现在任何允许表达式出现的地方。

(2) 检索

要检索对象里的值,可以采用[]后缀括住一个字符串表达式的方式。如果字符串是一个字符串字面量,且是一个合法的JavaScript标识符且不是保留字,那么也可以使用.来访问。优先考虑.,以内它紧凑且可读性好。

① 如果你尝试检索一个不存在的值,那么返回undefined。

② ||运算符可以用来填充默认值。

var middle = stooge[‘middle_name‘] || ‘unknown‘;

③ 尝试从undefined的成员属性中取值将会导致TypeError错误。这是可以用&&来避免错误。

flight.equipment // undefined
flight.equipment.model // throw "TypeError"
flight.equipment && flight.equipment.model  // undefined

(3) 更新

对象里的值可以通过赋值语句来更新。如果属性名已经存在于对象里,那么这个属性将会被替换掉。

(4) 引用

对象通过引用来传递。它们永远不会被复制。

(5) 原型

每个对象都连接到一个原型对象,并且可以从中继承属性。所有通过对象字面量创建的对象都会连接到Object.prototype,它是JavaScript中的标配对象。

① 原型连接在更新时是不起作用的。当我们对某个对象做出改变时,不会触及该对象的原型。

② 原型连接只有在检索值得时候才会被用到。如果我们尝试去获取某个属性值,但该对象没有此属性名,那么JavaScript会试着从原型对象中获取属性值。如果那个原型对象也没有该属性值,在从它的的原型中寻找,直到最后的终点Object.prototype。如果想要的属性还不存在,那么结果就是undefined。这个过程叫做委托。

③ 原型关系是一种动态关系。如果我们添加一个新的属性到原型中,该属性会立即对所有基于该原型创建的对象可见。

(6) 反射

其中一个方法是使用hasOwnProperty方法,如果对象拥有独有的属性,它将返回true。这个方法不会检查原型链。

(7) 枚举

for-in语句可以用来遍历一个对象中的所有属性名。该枚举过程会将列出所有属性——包括函数和你可能不关心的原型中的属性,所有有必要过滤。一般采用hasOwnProperty方法和typeof来处理。

var name;
for ( name in anthor_stooge ) {
    if ( typeof anthor_stooge[name] !== ‘function‘ ) {
        document.writeln(name + ‘:‘ + anthor_stooge[name]);
    }
}

属性名出现的顺序不是确定的,因此要对任何可能出现的顺序有所准备。如果你想确保顺序特定,那么使用数组是最好的选择。

(8) 删除

delete运算符可以用来删除对象的属性。如果对象包含该属性,那么该属性就会被删除,但是它不会触及原型链中的任何对象。

(9) 减少全局变量

最小化全局变量的方法之一就是为你的应用创建一个唯一的全局变量。

时间: 2024-12-19 23:53:52

《JavaScript语言精粹》—— 对象篇的相关文章

javascript语言精粹数组篇之Array的方法注意事项

本文并没有详细列出Array方法详解,本文侧重点在于使用Array编程时候要注意的问题.1.Array.concat var o = {name:"Gavin"}; var a1 = [1,2,3]; var a2 = [6,o]; var arr1 = a1.concat(a2); a1[0] = 0; o.name = "GavinPan"; console.log(arr1);//[ 1, 2, 3, 6, {name:"GavinPan"

《Javascript语言精粹》的学习(一).对象和函数

最近在学习小马和秦歌翻译的<javascript语言精粹>,果然如传闻般,里面的内容博大精深.有些章节所表达的意思往往需要看到后面的章节内容时才能够突然顿悟,因此,称这本书需要反复的去研究,真的名副其实.这两天看了对象和函数这两章,在这里把自己觉得需要关注的内容做一下笔记: ①对象常量中属性名的命名规范 记得刚开始学习对象常量的时候,觉得它真的很简便.一个对象名,一个大括号,N个“名/值”对,OK,搞定!可是在学习的过程中,也遇到过一些疑惑,比如在一些JS书籍中,在写对象常量时,对象中有的属性

JavaScript语言精粹读书笔记- JavaScript对象

JavaScript 对象 除了数字.字符串.布尔值.null.undefined(都不可变)这5种简单类型,其他都是对象. JavaScript中的对象是可变的键控集合(keyed collections). 对象是属性的容器,其中每个属性都拥有名字和值. JavaScript中的对象是无类别的(class-free)的.它对新属性的名字和值没有约束. JavaScript包括一个原型链特性,允许对象继承另一对象的属性. 对象的检索: stooge[“first-name”]或者stooge.

Javascript语言精粹之String常用方法分析

Javascript语言精粹之String常用方法分析 1. String常用方法分析 1.1 String.prototype.slice() slice(start,end)方法复制string的一部分来构造一个新的字符串 start<0时,它将于string.length相加 end参数可选,默认值为string.length.如果end<0,它将于string.length相加 var text='and in it he say " Any damn fool could'

JavaScript语言精粹 笔记01

内容比较简单,只是从头梳理一下JS的知识 语法空白标识符数字字符串语句 对象对象字面量检索更新引用原型反射枚举删除减少全局变量污染  语法 1 空白 空白可能表现为格式化字符或注释的形式.空白通常没有意义,但是偶尔必须用它来分割字符序列,否则它们就会被合并成一个单一的符号.例如: var that = this; var 和that之间的空格是不能去掉的,其他的空格都可以被移除. JS提供两种注释: /* */ // 建议使用//,因为/* */中要注释的内容可能包括字符 */ 而报错,例如:

javascript语言精粹----笔记【转载】

javascript语言精粹----笔记 1.6种值会为假(==false),分别是false,null,undefined,' ',0,NaN 2.typeof有6种值,分别是'number','string','boolean','undefined','function','object';其中typeof(null),结果是'object' 3.number类型总是64位浮点数,两个整数相除也可能出现非整数结果 4.如果第一个运算数的值为假,那么运算符&&产生它的第一个运算数的值.

《javascript语言精粹》——第3章

第三章:对象: 属性名字:可以是包括空字符串在内的任意字符串: 属性值:是除undefined值之外的任何值; [1].对象字面量: var obj={}; //空对象 var newobj={ name:"小明", age:17, school:{ class:"一班" } }; 属性名可加引号,也可不加 [2].检索 newobj["name"] //小明 newobj.age  //17  推荐使用.可读性更加好,紧凑 newobj[&qu

《javascript语言精粹》——第4章函数

函数就是对象 [1].函数字面量即(函数表达式)包括四部分: 第一部分:保留字function: 第二部分:函数名称,可有可无: 第三部分:包围在一对小括号的一组参数,参数用逗号隔开: 第四部分:包围在一对花括号的一组语句,是函数的主体: 函数字面量可以出现在任何允许表达式出现的地方. [2].调用有四种调用模式: 除了声明时定义的形参,每个函数接收附加的的参数:this和arguments  ,this的值取决于调用的模式. 第一种:方法调用模式: var aa={ value:0, incr

JavaScript语言精粹笔记

JavaScript语言精粹笔记 掌握语言的每个特性可以让你出风头,但是并不推荐,因为一部分的特性带来的麻烦可能远超本身的价值.正如书中所言,坏的材料并不能雕刻出好的作品,要成为一名更好的程序员,要取其精华去其糟粕.当你知道要做什么的时候,它还能表现的更好,编程时一件相对困难的事情,绝不应该在懵懂的状态下开始编程之旅. JS中的注意为//或者/*content*/,注释一定要精确地描述代码,不然没有用的注释比没有注释更糟糕. JS中的代码块不会创建新的作用域,因此变量应该被定义在函数的头部,而不

JavaScript语言精粹 笔记03

继承伪类对象说明符原型函数化部件 继承 JS不是基于类的,而是基于原型的,这意味着对象直接从其他对象继承. 1 伪类 JS提供了一套丰富的代码重用模式,它可以模拟那些基于类的模式,因为JS实际上没有类,所以把模拟的类称为伪类.我们可以定义一个构造器并扩充它的原型: var Mammal = function (name) { this.name = name; }; Mammal.prototype.get_name = function ( ) { return this.name; }; M