JavaScript语言精粹(重读一)

温故而知新
精华
  • 优点:弱类型、函数式、动态对象,对象字面量表示法
  • 缺点:全局变量
    • 依赖全局变量来进行连接,所有编译单元的所有顶级变量被撮合到一个被称为全局对象的公共命名空间。
  • 争议:原型继承,存在一个无类型的对象系统
语法 数字
js只有一种数字类型也就是说没有分理处整数类型和浮点数类型。所有1和1.0的值相同。
NaN是一个数值,表示不能产生正常结果的运算结果。NaN不等于任何值,包括自己。可以用isNaN(number)检测。
Infinity表示所有电影1.7******e+308的值
字符串
js中所有字符都是16位的,也就是unicode。
js中没有字符类型(注意字符和字符串区别)。要表示一个字符只需要创建一个包含一个字符的字符串即可。
字符串不可变这点和其他语言一样。
语句
web浏览器中,每个标签提供一个编译且立即执行的编译单元。因为缺少链接器,js把他们一起跑到一个公共的全局名字空间。
var用在函数内部,表示这个函数的私有变量。
js中当做假的值
  • false
  • null
  • undefined
  • 数字0
  • 数字NaN
【JavaScript语言精粹(重读一)】其他所有的值都会被当做真,包括ture,字符串“false”以及所有对象。
字面量
字面量是一种可以方便地按照指定规格创建新的对象的表示方法。个人理解类似于iOS中快速创建,数组,字典等形式。也可以叫做语法糖。
对象 简单数据类型:数字,字符串,布尔值、nullundefined。虽然数字,字符串拥有方法,貌似对象,但是他们是不可变的。其余的值所有所有都是对象。
js中的对象是可变的键值集合,数组,函数,正则都是对象。当然对象也是对象。
属性值可以是除了undefined值之外所有值。
js里面的对象是无类型的。对新属性的名称和属性没有限制。
js包含一个原型链的特性,允许对象继承另一个对象的属性正确使用能减少对象初始化的时间和内存。
对象字面量
var empty_object = { "name": "wesly", "age":12 };

属性名是包括空字符串在内的任何字符串
对象可以嵌套
检索
empty_object.name//wesly
如果成员属性并不存在则返回undefined
||运算符可以用来填充默认值比如var age = empty_object.age||12
如果从undefined的成员属性中获取值将会导致TypeError.这个时候可以通过&&来避免。先判断比如empty_object && empty_object.age
引用
这点和其他高级语言一样,对象通过引用来传递。
原型
用于继承
每个对象都连接到一个原型对象,并且可以从中继承属性。所有通过字面量创建的对象都连接到Object.prototype,它是js中标配对象
创建一个对象的时候可以选择某个对象作为它的原型。
原型连接在更新的时候不起作用,当对某个对象做出改变时,不会触及到该对象的原型。
反射
检查对象的属性是什么类型用typeof。注意原型链中的任何属性都会产生值function
使用hasOwnProperty监测对象是否对该属性独有。它不会检查原型链。
枚举
for in可用于遍历对象中所有的属性名。用typeof排除函数,用hasOwnProperty排除原型链中的
属性名出现的顺序不确定,如果需要确定,用一个数组来确定顺序。
删除
删除属性在其他语言中还真是不多见
delete可以用原来删除对象的属性。
它不会触及原型链中的任何对象。这种方式可以让原型链中的属性暴露出来。
减少全局变量的污染
js可以所以的定义全局变量容乃应用需要的所有资源,但是全局变量会削弱程序的灵活性。
最小化全局变量方法之一就是创建一个唯一的全局比那里。
var MyApp = {};MyApp变为应用的容器。其次还可以使用闭包来进行信息隐藏。

    推荐阅读