JavaScript学习-第三章对象

-JavaScript简单数据类型包括数字,字符串,布尔值,null值,undefind。其他所有都是对象。

-数字,字符串,布尔值'貌似'对象,因为他们有方法,但是他们是不可变的。(null和undefind没有方法)

null

    null是JavaScript语言的关键字,它表示一个特殊值,常用来描述“空值”。对null执行typeof预算,结果返回字符串“object",所以说,也可以将null认为是一个特殊的对象值,它的含义是“非对象”。但实际上,通常认为null是它自有类型的唯一的一个成员,它可以表示数字、字符串、对象是“无值”的。

undefined

    undefined也可以用来表示值的空缺。它和null不一样,它不是关键字,它是变量的一种取值,表明变量没有初始化,在查询对象的属性或数组元素的值时返回undefined,则说明这个属性或元素不存在。如果函数没有返回任何值,则返回undefined。引用没有提供实参的函数形参的值也只会得到undefined。undefined是预定义的全局变量,它的值就是“未定义”。

-JavaScript中的对象是可变的键控集合。

-对象是属性的容器,其中每个属性都拥有名字和值。属性值可以是除undefind值之外的任何值。

-JavaScript中对象是无类别的,他对新属性的名字和值没有约束。

-对象适合用于收集和管理数据。对象中可以包含其他对象,所以他们可以容易的表示成树形或图形结构。

-JavaScript中包含一个原型链特性,允许对象继承另一对象的属性。正确的使用它能减少对象初始化时间和内存消耗。

1.对象字面量

-一个对象字面量就是包围在一对花括号中的零个或多个'名/值'对。对象字面量可以出现在任何允许表达式出现的地方。

-属性名可以是包括空字符串在内的任何字符串

-在对象字面量中,如果属性名是一个合法的JavaScript标识符且不是保留字,并不强制要求用引号括住属性名。所以'first-name'必须要用引号括住,而first_name是可选的。逗号用来分隔多个名/值对。

-属性的值可以从包括另一个对象字面量在内的任意表达式中获得,对象是可以嵌套的。

2.检索

-要检索对象中包含的值,可以用[ ]括住的方式来表达,如果字符串是一个常数,那么也可以用表示法代替。优先使用表示法,因为更紧凑且可读性更强。

例如

stoong['first-name'](中括号表示)(嵌套的对象怎么表示?)

flight.departure.IAIA(表示法)

-如果检索一个不存在的值,将返回undefind值

-  ||可以用来填充默认值。(不存在的值?)

例如 var middle=stoong[middle_name]||'(none)'   (值的类型?)

        var middle=stoong.middle||"unknow"   (值的内容?)

-尝试检索一个undefind值将会导致TypeError(已发生类型错误)异常,这可以用&&运算符来避免错误。

例如

stoong.middle   //undefind

stoong.middle.model   //throw'TypeError'

stoong.middle&&stoong.middle.model  //undefind

-【a || b】:a存在返回a,a不存在返回b

 【a && b】:a存在返回b,a不存在返回a

3.更新

-对象中的值可以通过赋值语句来更新。如果属性名已存在对象中,这个属性的值将被替换

stoong.first_name=['Tim'];

如果不存在这个属性名,那么该属性会被扩展到该对象中。

4.引用

-对象通过引用来传递,他们永远不会被拷贝。

5.原型

-每个对象都连接到一个原型对象,并可以从中继承属性,所有通过对象字面量创建的对象都连接到object.prototype这个JavaScript中的标准对象。(类似于相加?可以双向检索吗?)

-原型链:由对象和他的原型对象组成(自己归纳的)

-Q:怎样将对象和原型对象链接起来?

6.反射

-检查对象中的属性的类型用typeof

但要注意原型链中也会被检索并产生一个值(如果typeof了一个函数名,则返回的类型为函数function)

有两个方法可以剔除(?)这些不需要的属性,第一个为检查程序剔除函数值,第二个为使用hasOwnProperty方法,如果对象中拥有独有属性,则会返回ture,hasOwnProperty方法不会检查原型链

7.枚举

-for(name in xxxxx)  for in 语句可以用来遍历一个对象中的所有属性名。该枚举过程会列出所有属性,包括函数和不关心的原型中的属性。想要过滤掉这些属性可以用hasOwnProperty方法或者typeof来排除函数。

-属性名出现的顺序是不确定的,如果想要属性以特定的顺序出现,最好的方法是避免使用for in语句,而是创建一个数组,在其中以正确的顺序包含属性名。通过使用for,可以不用担心发掘出原型链中的属性,并且按正确的顺序取到他们的值。

8.删除

-delete运算符可以用来剔除对象中的属性,他会移除对象中所确定包含的属性。他不会触及原型链中的任何对象。

-删除对象的属性还可能会让来自原型链中的属性浮现出来。

9.减少全局变量污染

-JavaScript中可以随意定义全局变量。但全局变量会削弱程序的灵活性,应该避免。方法为在应用中创建唯一一个全局变量。

例如

var map={};

map.stoong={

     属性

}

把多个全局变量都整理在一个名称空间下,将会显著降低与其他应用程序,组件或类库之间产生的糟糕的互相影响的可能性。map.stoong指向的是顶层结构。

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值