《JavaScript高级程序设计》第3章 基本概念
3.4 数据类型
3.4.1 typeof操作符
var message = 'some string'; console.log(typeof message); // 'string' console.log(typeof(message)); // 'string' console.log(typeof 95); // 'number'
typeof操作符可能返回的字符串:undefined、boolean、string、number、object、function
注:typeof null 会返回 'object',因为null被认为是一个空的对象引用。
3.4.2 Undefined类型
// 对未初始化和未声明的变量执行typeof操作都会返回undefined var message; console.log(typeof message); // 'undefined' console.log(typeof age); // 'undefined'
我们应该尽量显式地初始化变量的值,这样的话当typeof操作返回 'undefined' 时,我们就知道被检测的变量是尚未声明,而非尚未初始化。
3.4.3 Null类型
如果定义的变量准备在将来用于保存对象,则最好将它初始化为null而非其他值。这样一来只要检查该变量是否等于null值就可以知道它是否已经保存了一个对象的引用。
我们任何时候都没有必要把一个变量显式地赋为undefined,而意在保存对象的变量还没真正保存对象时应该明确被赋为null,这有助于进一步区分undefined和null。
3.4.4 Boolean类型
数据类型 | 转换为true的值 | 转换为false的值 |
Boolean | true | false |
String | 任何非空字符串 | "" |
Number | 任何非零数字 | 0和NaN |
Object | 任何对象 | null |
Undefined | 不适用 | undefined |
3.4.5 Number类型
console.log(NaN == NaN); // false,NaN与任何值都不相等,包括它自身 // isNaN()如果接收到一个非数值,会首先尝试将这个值转换为数值。 console.log(isNaN(NaN)); // true console.log(isNaN(10)); // false console.log(isNaN('10')); // false,可以被转换成数值 console.log(isNaN('blue')); // true,不可以被转换成数值
由于Number()函数在转换字符串不够理想,我们使用parseInt()函数,它在第一个字符不是数字或负号的时候返回NaN, 如果第一个字符是数字或负号,则继续往后解析,直到遇到非数字字符,后面的会被完全忽略。
parseInt()第二个参数是基数,指定被转换的字符串是什么进制的,解析出来的结果是十进制的。
var num1 = parseInt("10", 2); // 2(按二进制解析) var num2 = parseInt("10", 8); // 8(按八进制解析)
为了避免错误的解析,建议无论在什么情况下都指定基数,多数情况下要解析的都是十进制数,所以始终将10作为第二个参数是非常必要的。
与parseInt()类似的是parseFloat(),在解析浮点数的时候,第一个小数点有效,第二个则无效。
3.4.6 String类型
将一个值转换为字符串有两种方法,第一种是几乎每个值都有的toString()方法(是方法不是函数),但null和undefined没有这个方法。
第二种是String()函数,它遵循以下规则:
- 如果值有toString()方法,则调用该方法并返回相应结果
- 如果值是null,则返回"null"
- 如果值是undefined,则返回"undefined"
3.4.7 Object类型
通过new操作符可以创建一个对象的实例:
var o = new Object();
这样创建的实例有以下常用属性和方法:
- constructor:保存用于创建当前对象的函数,对于上面的例子而言就是Object()
- hasOwnProperty(property):用于检查给定的属性property在当前对象实例中(而不是在实例的原型中)是否存在
- isPrototypeOf(object):用于检查当前对象是不是传进来的参数object对象的原型
- toString():返回对象的字符串表示
- valueOf():返回对象的字符串、数值或布尔值表示,通常与toString()方法的返回值相同