JavaScript 拥有7种数据类型,具体如下:
JavaScript 拥有动态类型,这意味着相同的变量可用作不同的类型:
var x; // x 为 undefined
var x = 5; // 现在 x 为数字
var x = "John"; // 现在 x 为字符串
字符串是存储字符(比如 "Bill Gates")的变量。
字符串可以是引号中的任意文本。您可以使用单引号或双引号:
var carname = "Volvo XC60";
var carname = 'Volvo XC60';
您可以在字符串中使用引号,只要不匹配包围字符串的引号即可:
var answer = "It's alright";
var answer = "He is called 'Johnny'";
var answer = 'He is called "Johnny"';
JavaScript 只有一种数字类型。数字可以带小数点,也可以不带。
var x1 = 34.00; // 使用小数点来写
var x2 = 34; // 不使用小数点来写
极大或极小的数字可以通过科学计数法来书写。
var y = 123e5; // 12300000
var z = 123e-5; // 0.00123
布尔只能有两个值:true 或 false。
var x = true;
var y = false;
undefined 这个值表示变量不含有值。可以通过将变量的值设置为 null 来清空变量。
Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。两个Symbol值比较,是不相等的。
var s1 = Symbol()
var s2 = Symbol()
console.log(s1 == s2) // false
Symbol函数可以接收字符串作为一个参数,表示对Symbol值的描述,主要是为了区分。
var s1 = Symbol('Symbol')
var s2 = Symbol(123)
console.log(s1) // Symbol(Symbol)
console.log(s2) // Symbol(123)
有时,我们希望重新使用同一个 Symbol 值,Symbol.for方法可以做到这一点。Symbol.for方法是全局的。下面代码中,s1和s2都是 Symbol 值,但是它们都是同样参数的Symbol.for方法生成的,所以实际上是同一个值 ,Symbol值参数是描述。
var s1 = Symbol.for(123)
var s2 = Symbol.for(123)
console.log(s1 == s2)
Symbol.keyFor方法返回一个已登记的 Symbol 类型值的key描述。下面代码中,获取出来的是描述,是字符串类型。不管Symbol值的参数是什么,获取出来的都是字符串类型。而且只能获取登记过的Symbol值。
var s2 = Symbol.for(123)
console.log(Symbol.keyFor(s2)) // 123
var s1 = Symbol(123)
console.log(Symbol.keyFor(s1)) // undefined
Symbol值作为对象的属性名的几种方法。
var s1 = Symbol(123)
var obj = {}
obj[s1] = 123
console.log(obj) // {Symbol(123): 123}
var json = {
[s1] : 123
}
console.log(json) // {Symbol(123): 123}
之所以要使用[]括号,是因为要把Symbol值当做一个变量解析。如果不写[]括号的话,会被当作一个字符串。
创建名为 cars 的数组,共有3种方式:
// 第一种
var cars = new Array();
cars[0] = "Saab";
cars[1] = "Volvo";
cars[2] = "BMW";
// 第二种
var cars = new Array("Saab","Volvo","BMW");
// 第三种
var cars = ["Saab","Volvo","BMW"];
数组下标是基于零的,所以第一项是 [0],第二个是 [1],以此类推。
对象由花括号分隔。在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义,属性由逗号分隔。
var person = {firstname:"John", lastname:"Doe", id:5566};
上面例子中的对象 (person) 有三个属性:firstname、lastname 以及 id。
空格和换行无关紧要。声明可横跨多行:
var person = {
firstname : "John",
lastname : "Doe",
id : 5566
};
对象属性有两种寻址方式:
name = person.lastname;
name = person["lastname"];