比较运算符

    当我们对Number做比较时,可以通过比较运算符得到一个布尔值:

    2 > 5; // false

    5 >= 2; // true

    7 == 7; // true

    实际上,JavaScript允许对任意数据类型做比较:

    false == 0; // true

    false === 0; // false

    要特别注意相等运算符 == 。JavaScript在设计时,有两种比较运算符:

    第一种是 == 比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;

    第二种是 === 比较,它不会自动转换数据类型,如果数据类型不一致,返回 false ,如果一致,再比较。

    由于JavaScript这个设计缺陷, 不要 使用 == 比较,始终坚持使用 === 比较。

    另一个例外是 NaN 这个特殊的Number与所有其他值都不相等,包括它自己:

    NaN === NaN; // false

    唯一能判断 NaN 的方法是通过 isNaN() 函数:

    isNaN(NaN); // true

    最后要注意浮点数的相等比较:

    1 3 === (1 - 2 3); // false

    这不是JavaScript的设计缺陷。浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数。要比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值:

    Math.abs(1 3 - (1 - 2 3)) < 0.0000001; // true

    null和undefined

    null 表示一个“空”的值,它和 0 以及空字符串 '' 不同, 0 是一个数值, '' 表示长度为0的字符串,而 null 表示“空”。

    在其他语言中,也有类似JavaScript的 null 的表示,例如Java也用 null ,Swift用 nil ,Python用 None 表示。但是,在JavaScript中,还有一个和 null 类似的 undefined ,它表示“未定义”。

    JavaScript的设计者希望用 null 表示一个空的值,而 undefined 表示值未定义。事实证明,这并没有什么卵用,区分两者的意义不大。大多数情况下,我们都应该用 null undefined 仅仅在判断函数参数是否传递的情况下有用。

    数组

    数组是一组按顺序排列的集合,集合的每个值称为元素。JavaScript的数组可以包括任意数据类型。例如:

    [1, 2, 3.14, 'Hello', null, true];

    上述数组包含6个元素。数组用 [] 表示,元素之间用 , 分隔。

    另一种创建数组的方法是通过 Array() 函数实现:

    new Array(1, 2, 3); // 创建了数组[1, 2, 3]

    然而,出于代码的可读性考虑,强烈建议直接使用 []

    数组的元素可以通过索引来访问。请注意,索引的起始值为 0

    var arr = [1, 2, 3.14, 'Hello', null, true];

    arr[0]; // 返回索引为0的元素,即1

    arr[5]; // 返回索引为5的元素,即true

    arr[6]; // 索引超出了范围,返回undefined

    对象

    JavaScript的对象是一组由键-值组成的无序集合,例如:

    var person = {

    name: 'Bob',

    age: 20,

    tags: ['js', 'web', 'mobile'],

    city: 'Beijing',

    hasCar: true,

    zipcode: null

    };

    JavaScript对象的键都是字符串类型,值可以是任意数据类型。上述 person 对象一共定义了6个键值对,其中每个键又称为对象的属性,例如, person name 属性为 'Bob' zipcode 属性为 null

    要获取一个对象的属性,我们用 对象变量.属性名 的方式:

    person.name; // 'Bob'

    person.zipcode; // null