5 种简单数据类型: UndefinedNullBooleanNumber 和 String1 种种复杂数据类型 -----Object
typeof
typeof 操作符用来检测变量的数据类型
值或变量描述 | typeof 返回字符串 |
---|---|
未定义,没有赋值 | undefined |
布尔值 | boolean |
字符串 | string |
数值 | number |
对象或 null | object |
函数 | function |
Undefined 类型
Undefined 类型只有一个值, undefined 使用 var 声明变量, 但是没有对其初始化, 这个变量值就是 undefined
未初始化的变量和根本不存在的变量不一样
- var box;
- console.log(name);
typeof box,typeof name 都返回 undefined
, 但是他们的值一个是 undefined, 一个是错误, 尽管他们的类型都是 undefined, 所以在定义变量的时候, 尽可能不要只声明, 不赋值
Null 类型
该类型只有一个值, null 表示一个空对象引用, typeof 检测返回 object
如果定义的变量准备保存对象, 最好初始化为 null
重要说明, undefined 派生子 null,ECMA-262 规定对它们的相等性测试返回 true
- alert(undefined == null);
- //true, 因此, 未初始化的变量和赋值为 null 的变量会相等, 但不全等(===), 因为数据类型不一样
Boolean 类型
有两个值, true 和 false 而 true 不一定等于 1,false 不一定等于 0JavaScript 是区分大小写的, True 和 False 或者其他都不是 Boolean 类型的值
虽然 Boolean 类型的字面量只有 true 和 false 两种, 但 ECMAScript 中所有类型的值都有
与这两个 Boolean 值等价的值要将一个值转换为其对应的 Boolean 值, 可以使用转型函数
- Boolean()
- var hello = 'Hello World!';
- var hello2 = Boolean(hello);
- alert(typeof hello);
上面是一种显示转换, 属于强制性转换而实际应用中, 还有一种隐式转换比如, 在
if 条件语句里面的条件判断, 就存在隐式转换
- var hello = 'Hello World!';
- if (hello) {
- alert('如果条件为 true, 就执行我这条!');
- } else {
- alert('如果条件为 false, 就执行我这条!');
- }
其他类型转换成 Boolean 类型规则
Number 类型
有两种数值, 整型和浮点型, 由于保存浮点数值需要的内存空间比整型数值大两倍, 因此 ECMAScript 会自动将可以转换为整型的浮点数值转成为整型
- var box = 8.; // 小数点后面没有值, 转换为 8
- var box = 12.0; // 小数点后面是 0, 转成为 12
浮点数值的范围在: Number.MIN_VALUE ~ Number.MAX_VALUE 之间
- alert(Number.MIN_VALUE); // 最小值
- alert(Number.MAX_VALUE); // 最大值
如果超过了浮点数值范围的最大值或最小值, 那么就先出现
Infinity
(正无穷)或者 - Infinity(负无穷)
- var box = 100e1000; // 超出范围, Infinity
- var box = -100e1000; // 超出范围,-Infinity
也可能通过
Number.POSITIVE_INFINITY
和
Number.NEGATIVE_INFINITY
得到
Infinity
(正无穷)及 - Infinity(负无穷)的值
- alert(Number.POSITIVE_INFINITY); //Infinity(正无穷)
- alert(Number.NEGATIVE_INFINITY);//-Infinity(负无穷)
要想确定一个数值到底是否超过了规定范围, 可以使用 isFinite()函数如果没有超过, 返回 true, 超过了返回 false
NaN, 即非数值 (Not a Number) 是一个特殊的值, 这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)
可以通过 Number.NaN 得到 NaN 值, 任何与 NaN 进行运算的结果均为 NaN,NaN 与自身不相等(NaN 不与任何值相等)
ECMAScript 提供了 isNaN()函数, 用来判断这个值到底是不是 NaNisNaN()函数在接收到一个值之后, 会尝试将这个值转换为数值
- alert(isNaN(NaN)); //true
- alert(isNaN(25)); //false,25 是一个数值
- alert(isNaN('25')); //false,'25'是一个字符串数值, 可以转成数值
- alert(isNaN('Lee')); //true,'Lee'不能转换为数值
- alert(isNaN(true)); //false true 可以转成成 1
isNaN()函数也适用于对象在调用 isNaN()函数过程中, 首先会调用 valueOf()方法, 然后确定返回值是否能够转换成数值如果不能, 则基于这个返回值再调用 toString()方法, 再测试返回值
- var box = {
- toString : function () {
- return '123'; // 可以改成 return 'Lee'查看效果
- }
- };
- alert(isNaN(box)); //false
有 3 个函数可以把非数值转换为数值: Number()parseInt()和 parseFloat()Number()函数是转型函数, 可以用于任何数据类型, 而另外两个则专门用于把字符串转成数值
- alert(Number(true)); //1,Boolean 类型的 true 和 false 分别转换成 1 和 0
- alert(Number(25)); //25, 数值型直接返回
- alert(Number(null)); //0, 空对象返回 0
- alert(Number(undefined)); //NaN,undefined 返回 NaN
如果是对象, 首先会调用 valueOf()方法, 然后确定返回值是否能够转换成数值如果转换的结果是 NaN, 则基于这个返回值再调用 toString()方法, 再测试返回值
- var box = {
- toString : function () {
- return '123'; // 可以改成 return 'Lee'查看效果
- }
- };
- alert(Number(box)); //123
String 类型
表示字符串, 单引号和双引号表示字符串,, 必须成对出现, 不能穿插
使用, 否则会出错
ECMAScript 中的字符串是不可变的, 也就是说, 字符串一旦创建, 它们的值就不能改变要改变某个变量保存的字符串, 首先要销毁原来的字符串, 然后再用另一个包含新值的字符串填充该变量
- var box='s';
- box=box+'a';
- console.log(box)//sa
- box[1]='p';
- console.log(box)//sa
toString()方法可以把值转换成字符串
如果在转型之前不知道变量是否是 null 或者 undefined 的情况下, 我们还可以使用转型函数 String(), 这个函数能够将任何类型的值转换为字符串
- var box = null;
- alert(String(box));//null, 若使用 toString 方法, 则出错
Object 类型
ECMAScript 中的对象其实就是一组数据和功能的集合对象可以通过执行 new 操作符后跟要创建的对象类型的名称来创建
var box = new Object();
Object()是对象构造函数, 如果对象初始化时不需要传递参数, 可以不用写括号, 但这种方式我们是不推荐的
var box = new Object;
Object()里可以任意传参, 可以传数值字符串布尔值等而且, 还可以进行相应的计算
- var box = new Object(2); //Object 类型, 值是 2
- var age = box + 2; // 可以和普通变量运算
- alert(age); // 输出结果 4, 转型成 Number 类型了
既然可以使用 new Object()来表示一个对象, 那么我们也可以使用这种 new 操作符来创建其他类型的对象
- var box = new Number(5); //new String('Lee')new Boolean(true)
- alert(typeof box); //Object 类型
参考资料: JavaScript 高级程序设计(第 3 版)
来源: http://www.jianshu.com/p/df8bb743aac8