变量
- 字符串
- 数字 : number (整数和小数)
- 布尔
- 数组
- 对象: object (普通对象,数组,函数)
- Undefined 和 null
- Symbol (ES6 新引入)
// 未定义类型
var x ;
// 数字类型
var y = 5;
// 字符串类型 双引号或者单引号均可
var k = 'john';
var a = 123e5;
// 布尔类型
var b = true;
// 数组类型
var cars = [];
cars[0] = "Saab";
cars[2] = "Volvo";
// 对象类型
var person = {name:"veng",age:22};
var name = person.name;
var name2 = person["name"];
var s = Symbol();
typeof 运算符
typeof运算符可以返回一个值的数据类型。
// typeof 的用法
var number = 1;
var string = "hello";
var b = true;
var un = undefined;
var n = null;
var o = {};
var array = [];
var func = function () {};
console.log('number:', typeof number);
console.log("string:", typeof string);
console.log("boolean:", typeof b);
console.log("undefined:", typeof un);
console.log("null:", typeof n);
console.log("object:", typeof o);
console.log("array:", typeof array);
console.log("function:", typeof func);
==>
number: number
string: string
boolean: boolean
undefined: undefined
null: object
object: object
array: object
function: function
null 和 undefined
null与undefined都可以表示“没有”,含义非常相似。将一个变量赋值为undefined或null,老实说,语法效果几乎没区别。
//在if语句中,它们都会被自动转为false,相等运算符(==)甚至直接报告两者相等
undefined == null
// true
既然含义与用法都差不多,为什么要同时设置两个这样的值,这不是无端增加复杂度,令初学者困扰吗?这与历史原因有关。
1995年 JavaScript 诞生时,最初像 Java 一样,只设置了null表示"无"。根据 C 语言的传统,null可以自动转为0。
Number(null) // 0
5 + null // 5
但是,JavaScript 的设计者 Brendan Eich,觉得这样做还不够。首先,第一版的 JavaScript 里面,null就像在 Java 里一样,被当成一个对象,Brendan Eich 觉得表示“无”的值最好不是对象。其次,那时的 JavaScript 不包括错误处理机制,Brendan Eich 觉得,如果null自动转为0,很不容易发现错误。
因此,他又设计了一个undefined。区别是这样的:null是一个表示“空”的对象,转为数值时为0;undefined是一个表示"此处无定义"的原始值,转为数值时为NaN。
Number(undefined) // NaN
5 + undefined // NaN
布尔值
如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为false,其他值都视为true。
undefinednullfalse0NaN""或''(空字符串)
if ("") {
console.log("\"\" is true");
} else {
console.log("\"\" is false");
}
if ({}) {
console.log(`{} is true`);
}
if ([]) {
console.log(`[] is true`);
}
=>
"" is false
{} is true
[] is true