Javascript代码可以对数据按照一定的语法进行操作,所以javascript设计规范中规定了两种数据类型:
第一种是存储数据的类别,具体为:
1. Undefined,
Undefined类型只有一个值,任何没有被赋值的变量的值都是undefined
如图:我们打开一个node.exe的新窗口:
2. Null
Null类型只有一个值,就是null
typeof null //"object",chrome浏览器对这行代码的实现是把null作为Object类
3. Boolean,
Boolean类型有两个值,为true和false,分别对应真和假
var b = true,c = false;
console.log(Boolean()) // false
console.log(Boolean(false)) // false
console.log(Boolean(true)) // true
console.log(new Boolean(true)) //返回Boolean包装对象,是object类型
typeof(new Boolean()) // "object"
4. String,
String类型指的是由0个或多个无符号整型字符组成的字符串类型,由双引号和单引号
console.log('123') //字符串类型 ‘123“
console.log("abc") //字符串类型 ‘abc“
console.log(String('123')) //字符串类型 ‘abc“
console.log(new String("abc")) //字符串的包装对象,是Object类型
typeof(new String("abc")) //"object"
typeof("abc") //"string"
5. Number,
var i = 1;
i.constructor //在chrome中的返回值为function Number() { [native code] }
6. Object.
Object类型是javascript中的对象类型,有函数对象Function,数组对象Array,日期Date对象等一系列Object类型的对象
根据面向对象的要求,Object类型在javascript语言的设计上应该要保证Object不仅是一系列属性和方法的集合,
同时还要保证它和其他object的各种关系的实现,比如继承
Object类型在语言设计的角度存在2种类型的成员:
1. javascript语言中可见属性和方法
2. javascript设计规定的内部属性
如图:
o对象中有我们定义的name属性,函数getName,还有一个属性__proto__,且是Object对象的引用
这里__proto__属于内部属性,各个浏览器实现javascript语言规范实现有区别,并不是每个浏览器都可见
其中设计规定的内部属性分为两种
1. 所有Object都共同存在的
2. 仅仅在某些类中存在的
注:这些属性不需要掌握只是为后面对javascript的理解提供理论依据
Typeof操作符例子附图:
第二种为语义描述类别,不会直接出现在javascript代码中,知道即可
1. Reference(引用)
Reference类型的定义是:一个申明名称的绑定。顾名思义,它的类型中至少有,而且必须有两个属性:名称和绑定值
绑定的类型能且只能是上文第一种类别提到的6类,外加第二种语义类型中的environment record类型
通过使用关键字var定义一个javascript变量,从而得到一个Reference(引用),如下
var ref; //其中ref就是一个引用类型,有两个属性,第一个是引用名称为字符串ref,另一个是默认绑定的值undefined
ref = {} //将{}构造的对象的“地址”绑定到aa的绑定值属性上,即将undefined对象地址替换为{}对象地址
其中引号中的地址有可能并不是地址,用地址只是为了形象的说明它的实现方式
如果说所有的设计原则,设计模式都体现在两个字“间接”上,那么引用就是面向对象,甚至任何高级语言内置的第一个抽象方式
我们对绑定对象的Reference的任何操作都直接作用在了该对象上,而不是直接对该对象进行操作
2. List,
3. Completion,
4. Property
5. Descriptor,
6. Property Identifier,
7. Lexical Environment,
8. Environment Record.