JS 里的数据类型
- 概述
数据类型一共有7种,分别是数字(Number), 字符串(String),布尔值(Boolean), Symbol, null, undefined, 对象(Object)。(其中Symbol类型详见ES6)
数值(Number):整数和小数(如4,3.14)。
字符串(String): 文本("Hello World!")。
布尔值(Boolean): true(真), false(假)。
undefined: 表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值。
null: 表示空值,即此处的值为空。
对象(object):各种值组成的集合。
其中对象还可以分为三类,分别是:狭义的对象(object), 数组(Array), 方法(function)。
- undefined和null
好像只有JS有两个代表“空值”的语言。
null表示空值,即该处的值现在为空。调用函数时,某个参数未设置任何值,这时就可以传入null,表示该参数为空。比如,某个函数接受引擎抛出的错误作为参数,如果运行过程中未出错,那么这个参数就会传入null,表示未发生错误。
undefined表示“未定义”,下面是返回undefined的典型场景。
// 变量声明了,但是没有赋值
var i;
i // undefined
// 调用函数时,应该提供的参数没有提供,该参数等于undefined
function f(x) {
return x;
}
f(); // undefined
// 对象没有赋值的属性
var obj = new Object();
obj.p // undefined
// 函数没有返回值时,默认返回undefined
function f() {}
f() // undefined
建议在声明某个变量,但是现在还没赋值时。对于除了对象以外的数据类型,用var a = null,对于对象类型,用var obj = undefined.
- typeof运算符
判断变量的类型,返回一段字符串。
七种数据类型用typeof运算基本返回对应的类型。比如:
typeof 123 // "number"
在概述中说,对象还分为狭义对象、数组和函数。数组返回的是object,但是函数返回function, null 返回object.
let arr = [];
let function = function() {};
typeof arr // "object";
typeof function // "function";
typeof null; // "object"
- 布尔值
如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为false,其他值都视为true。
undefined
null
false
0
NaN
""或者''(空字符串)
注意:空数组([])和空对象({})对应的布尔值都是true.
5.对象属性
在做练习的时候,对象属性让我有些疑惑,这里做一个记录解析。
首先我们要明确一个概念,就是对象(Object)中每一个key其实是字符串,就算我们这么声明:
var obj = {
name: 'Jason',
age: 18,
};
obj中的name和age都是字符串。在取对象属性时,有如下情况:
var obj = {
name: 'Jason',
age: 18,
};
obj['name'] // 'Jason'
obj['name']这是最正确书写方式,但是有一种特例写法,就是obj.name, 这种方式是默认‘.’后面的‘name’必须符合标识符才可行。
var obj = {
'3+3' : 6,
'6': 12,
'9a': 9,
}
obj.9a // 报错
如果写成obj[name]则是undefined,因为此处的name是个变量,没有指明变量name的值则为undefined。
如果[]中是个数字,则会自动转为字符串.
var obj = {
'3+3' : 6,
'6': 12,
}
obj[3+3] // 12
obj[3+3]中会先计算出3+3=6,那么obj[3+3]就等价于obj[6],然后等价于obj['6'].