一. JavaScrip的简单类型包括
1.数字number
JS不分整型与浮点型
两个浮点型相加,精度不够
2.字符串string
3.布尔值boolean
true跟false
4.null
5.undefined
以上都是简单数据类型
其他都是对象 Function Array
研究一下 前五个貌似是对象,因为他们拥有方法,但是他们是不可变的?
简单数据类型,不是对象
二. JavaScrip中的对象
JavaScrip中的对象都是可变的键控集合。
对象是属性的容器,其中每个属性都拥有名字和值。名字可以是包括空字符在内的任意字符串,值是除undefined值之外的任何值。
对象是无类别的。对新属性的名字与值没有约束。适合用于收集和管理数据。对象也可以包含其他对象,它们可以表示成树形或图形结构。
原型链特性:允许对象继承另一个对象的属性。正确使用能减少对象的初始化的时间与内存消耗。
1.对象字面量
对象字面量提供了一种非常方便的创建新的对象值的方法。它是包围在一对花括号中的0或多个名/值对。它可以出现在任何允许表达式出现的地方。它的属性名可以是包括空字符串在内的任意字符串。
如果属性名合法且不是保留字,不强制要用引号括住属性名。用引号括住“first-name”是必须的,但对于first_name来说不是必须的。逗号用来分隔多个名/值对。
属性的值可以从包括另一个对象字面量在内的表达式中获得,对象是可以嵌套的。
var lihua = {
name: "LiHua",
id: "123054",
city: "BeiJing"
};
2.检索
检索对象中包含的值,可以用在[]后缀中括住一个字符串表达式。如果该表达式是一个常数,且合法并且不是保留字,可使用.表示法。.表示法更紧凑且可读性更好。
stooge["first-name"] // "LiHua"
lihua.name // "LiHua"
如果检索的不存在的元素,将返回undefined值。
stooge["num"] // undefined
lihua.num // undefined
|| 运算符可以用来填充默认值。
" 运算符可以避免检索一个undefined值所导致的TypeError异常。
3.更新
对象中的值可以通过赋值语句来更新。如果属性名存在于对象中,那这个属性的值将会更新;如果不存在,那该属性将会扩充到该对象中。
4.引用
对象通过引用来传递。它们永远不会被拷贝。
5.原型
每个对象都连接一个原型对象,可以从中继承属性。通过对象字面量创建的对象都连接 Object.prototype 这个JS中的标准对象。
创建新对象时,可选择某个对象作为它的原型。
原型连接在更新时是不起作用的。更新对象时,对该对象的原型无影响。
原型连接只有在检索值的时候才会用到。会从某个对象一层一层的往上找,直到找到这个属性,若该属性不存在这个原型链中,那将返回 undefined。
在一个对象中添加一个新的属性,该属性会对所有以该对象作为原型对象的下级对象可见。
6.反射
typeof 操作符可以确定属性的类型
tyopef lihua.id // 'number'
注意原型链中任意属性都会产生一个值。
tyopef lihua.toString // 'function'
去除不需要的属性的方法:
- 让你的程序检查并删除函数值。
- 使用 hasOwnProperty 方法,如果对象拥有独有的属性,将返回true,否则返回false。该方法不会检查原型链。
flight lihua.city // true
7.枚举
for in 语句可用来遍历一个对象中的所有属性名。该枚举过程会列出所有的属性,包括函数与原型中的属性,所以需要过滤不想要的值。最常用的过滤器为 hasOwnProperty 方法与使用 typeof 来排除函数。
如果要是属性以特定的顺序出现,做好的方法是完全避免使用 for in 语句,去创建一个数组,在其中以特定顺序包含属性名。
通过使用 for 而不是 for in,可以得到我们想要的属性,而不用担心可能出现原型链中的属性,并按特定顺序取得它们的值。
8.删除
delete 运算符可以用来删除对象中的属性。它只会移除该对象在中的属性,不会触及到原型链中的对象。
9.减少全局变量污染
JS可以随意定义全局变量,但全局变量影响程序的灵活性,应尽量避免使用。
最小化使用全局变量的一个方法时在你的程序中只创建唯一一个全局变量。
将多个全局变量整理在一个名称空间下,可以显著降低与其他程序、组件等相互影响,程序也更容易阅读。