JavaScript具有编程语言所期望的许多值:布尔值,数字,字符串,数组等。JavaScript中的所有值都具有属性。[ 1 ]每个属性都有一个键(或名称)和一个值。您可以想到诸如记录字段之类的属性。您可以使用点(.)运算符读取属性:
value.propKey
例如,字符串'abc'具有属性length:
> var str ='abc';
>长度
3
前面也可以写成:
>'abc'.length
3
点运算符还用于分配 属性值:
> var obj = {}; //空对象
> obj.foo = 123; //创建属性`foo`,将其设置为123
123
> obj.foo
123
您可以使用它来调用方法:
>'hello'.toUpperCase()
'你好'
在前面的示例中,我们toUpperCase()在value上 调用了方法'hello'。
原始值与对象
JavaScript有所区别 值之间:
该原始值是布尔型,数字,字符串,null和undefined。
所有其他值都是object。
两者之间的主要区别在于比较方式。每个对象都有唯一的标识,并且(严格地)等于自身:
> var obj1 = {}; //一个空对象
> var obj2 = {}; //另一个空对象
> obj1 === obj2
假
> obj1 === obj1
真正
相反,所有编码相同值的原始值都被认为是相同的:
> var prim1 = 123;
> var prim2 = 123;
> prim1 === prim2
真正
接下来的两节将更详细地说明原始值和对象。
原始价值
以下是所有原始值(或简写为原语):
布尔值:true,,false(请参阅布尔值)
数字:1736,1.351(请参阅数字)
字符串:'abc',"abc"(请参阅字符串)
两个“非值”:undefined,null(请参见undefined和null)
基元具有以下特征:
按价值比较
比较“内容”:
> 3 === 3
真正
>'abc'==='abc'
真正
永远不变
不能更改,添加或删除属性:
> var str ='abc';
> str.length = 1; //尝试更改属性`length`
> str.length //⇒没有效果
3
> str.foo = 3; //尝试创建属性`foo`
> str.foo //⇒无效,属性未知
未定义
(读取未知属性总是返回undefined。)
对象
所有非原始 值是对象。最常见的对象是:
普通对象,可以由对象文字创建(请参见Single Objects):
{
firstName: 'Jane',
lastName: 'Doe'
}
前面的对象具有两个属性:property 的值为firstName is 'Jane'和property 的值为lastNameis 'Doe'。
数组,可以是由数组文字创建(请参见Arrays):
[ 'apple', 'banana', 'cherry' ]
前面的数组具有三个可以通过数字索引访问的元素。例如,索引'apple'为0。
正则表达式,可以由正则表达式文字创建(请参见正则表达式):
/^a+b+$/
对象具有以下特征:
参考比较
身份进行比较;每个值都有其自己的标识:
>({} === {})//两个不同的空对象
假
> var obj1 = {};
> var obj2 = obj1;
> obj1 === obj2
真正
默认为可变
通常,您可以自由地更改,添加和删除属性(请参见Single Objects):
> var obj = {};
> obj.foo = 123; //添加属性`foo`
> obj.foo
123
未定义且为null
大多数编程语言都具有表示缺少信息的值。JavaScript有两个这样的“非值” undefined和null:
undefined表示“无值”。未初始化的变量是undefined:
> var foo;
>富
未定义
缺少的参数是undefined:
>函数f(x){return x}
> f()
未定义
如果读取不存在的属性,则会得到undefined:
> var obj = {}; //空对象
> obj.foo
未定义
null 表示“无对象”。只要需要对象(参数,对象链的末尾等),它就用作非值。
警告
undefined而且null没有属性,甚至没有标准方法toString()。
检查未定义或为空
函数通常允许您通过undefined或指示缺失值null。您可以通过显式检查执行以下操作:
if (x === undefined || x === null) {
...
}
您还可以利用undefined和null同时考虑false以下事实:
if (!x) {
...
}
警告
false,0,NaN,和''也算false(见Truthy和Falsy)。
使用typeof和instanceof对值进行分类
有两个运算符 值分类:typeof主要用于原始值,而instanceof用于对象。
typeof 看起来像这样:
typeof value
它返回一个字符串,描述的“类型” value。这里有些例子:
> typeof true
'布尔'
> typeof'abc'
'串'
> typeof {} //空对象文字
'宾语'
> typeof [] //空数组文字
'宾语'
下表列出了的所有结果typeof:
操作数 结果
undefined
'undefined'
null
'object'
布尔值
'boolean'
数值
'number'
字符串值
'string'
功能
'function'
所有其他正常值
'object'
(引擎创造的值)
允许JavaScript引擎创建typeof返回任意字符串的值(不同于此表中列出的所有结果)。
typeof null返回'object'是无法修复的错误,因为它会破坏现有代码。这并不意味着它null是一个对象。
instanceof 看起来像这样:
value instanceof Constr
它返回trueif是否value是由构造函数创建的对象Constr(请参见Constructors:对象的工厂)。这里有些例子:
> var b = new Bar(); //由构造函数Bar创建的对象
> b instanceof酒吧
真正
> {} instanceof对象
真正
> [] instanceof Array
真正
> [] instanceof Object //数组是Object的子构造函数
真正
>未定义的instanceof对象
假
> null instanceof Object
假