一、6大语言类型
string
number
boolean
null
undefined
object
其中null有时候被当做对象(type of null返回"object"),这是语言的一个bug:不同对象在底层都表示为二进制,在JavaScript中二进制前三位都为0的话会被判断为object类型,null的二进制表示全是0,自然前三位也是0。
二、复杂基本类型
函数,就是对象的一个子类型( 从技术角度来说就是“ 可调用的对象”)。 JavaScript 中的函数是“ 一等公民”, 因为它们本质上和普通的对象一样( 只是可以调用), 所以可以像操作其他对象一样操作函数( 比如当作另一个函数的参数)。
数组,也是对象的一种类型, 具备一些额外的行为。 数组中内容的组织方式比一般的对象要稍微复杂一些。
三、9大内置对象
JavaScript 中还有一些对象子类型, 通常被称为内置对象:
String
Number
Boolean
Object
Function
Array
Date
RegExp
Error
其中,
原始值 "I am a string" 并不是一个对象, 它只是一个字面量, 并且是一个不可变的值。如果要在这个字面量上执行一些操作, 比如获取长度、 访问其中某个字符等, 那需要将其转换为 String 对象。
幸好, 在必要时语言会自动把字符串字面量转换成一个 String 对象, 也就是说你并不需要显式创建一个对象。 JavaScript 社区中的大多数人都认为能使用文字形式时就不要使用构造形式。
思考下面的代码:
var strPrimitive = "I am a string";
console.log( strPrimitive.length ); // 13
console.log( strPrimitive.charAt( 3 ) ); // "m"
使用以上两种方法, 我们都可以直接在字符串字面量上访问属性或者方法, 之所以可以这样做, 是因为引擎自动把字面量转换成 String 对象, 所以可以访问属性和方法。
同样的事也会发生在数值字面量上, 如果使用类似 42.359.toFixed(2) 的方法, 引擎会把42 转换成 new Number(42)。 对于布尔字面量来说也是如此。
null 和 undefined 没有对应的构造形式, 它们只有文字形式。
相反, Date 只有构造, 没有文字形式。
对于 Object、 Array、 Function 和 RegExp( 正则表达式) 来说, 无论使用文字形式还是构造形式, 它们都是对象, 不是字面量。 在某些情况下, 相比用文字形式创建对象, 构造形式可以提供一些额外选项。 由于这两种形式都可以创建对象, 所以我们首选更简单的文字
形式。 建议只在需要那些额外选项时使用构造形式。
Error 对象很少在代码中显式创建, 一般是在抛出异常时被自动创建。 也可以使用 newError(..) 这种构造形式来创建, 不过一般来说用不着。
浙公网安备 33010602011771号