JavaScript 的基本数据类型

1. Number:数字

JavaScript 不区分整数和浮点数,统一用 Number 表示。


// NaN 表示 Not a Number,当无法计算结果时用 NaN 表示
NaN;
// NaN 无法做比较,只能使用 isNaN() 函数判断
NaN === NaN;  // false
isNaN(NaN);  // true

// Infinity 表示无限大,当数值超过了 JavaScript 的 Number 所能表示的最大值时,就表示为 Infinity
Infinity;

2. string:字符串


// 由于多行字符串用 \n 写起来比较费事,所以最新的 ES6 标准新增了一种多行字符串的表示方法,用反引号 `……` 表示
let str = `this is 
multi lines 
string
`;
// 等同于如下代码
let str1 = 'this is\n multi lines\n string';


// 模板字符串
let name = 'alex';
let age = 26;
let message = `hello, ${name}, are you ${age} years old ?`;
console.log(message);  // hello, alex, are you 26 years old ?

// 操作字符串
name[3];  // "x"

// 字符串全部转大写
let name1 = name.toUpperCase();  // "ALEX"

// 字符串全部转小写
name1.toLowerCase();  // "alex"

// 搜索指定字符串出现的位置
name.indexOf('l');  // 1
name.indexOf('jack');  // -1 没有找到指定的子串

// 截取字符串
name.substring(1, 3);  // "le" 从索引 1 开始到 3 (不包括 3)
name.substring(1);  // "lex"  从索引 1 开始到结束

3. boolean: 布尔值

4. null: (空值) 和 undefined:(未定义)

大多数情况下,我们都应该用 null 。 undefined 仅仅在判断函数参数是否传递的情况下有用。

5. array:数组


// 声明新数组(建议直接使用这种方式声明)
let new_arr = [1, 'Hello', null, true];
// 或者
let new_arr1 = new Array(1, 'Hello', null, true);

// 获取元素
new_arr[1];  // 'Hello'
// 修改元素
new_arr[1] = 'World';
new_arr;  // [1, 'World', null, true]

// 搜索指定元素的索引位置
new_arr.indexOf(null);  // 2

// 截取数组
new_arr.slice(0, 3);  // [1, "Hello", null]  从索引 0 开始,到索引 3 结束,但不包含索引 3
new_arr.slice(2);  // [null, true]  从索引 2 开始到结束
new_arr.slice();  // [1, 'Hello', null, true]  从头到尾截取所有元素

// 往数组的末尾添加若干元素
new_arr.push('Jack', 'Alice');  // 6 返回 array 的新长度

// 删除最后一个元素
new_arr.pop();  // 'Alice'

// 往数组的头部添加若干元素
new_arr.unshift('Jack', 'Alice');  // 6 返回 array 的新长度

// 删除第一个元素
new_arr.shift();  // 'Jack'

// 对数组进行排序
let arr = ['B', 'C', 'A'];
arr.sort();
arr;  // ["A", "B", "C"]

// 反转数组
let arr = ['Alice', 'Alex', 'Jack'];
arr.reverse();
arr;  // ["Jack", "Alex", "Alice"]

// 从指定的索引开始删除若干元素,然后再从该位置添加若干元素
let arr = ['A', 'B', 'C', 'D', 'E', 'F'];
// 从索引 2 开始删除 3 个元素,然后再添加 2 个元素
arr.splice(2, 3, 'C1', 'D1');  // ["C", "D", "E"]  返回删除的元素
arr;  // ["A", "B", "C1", "D1", "F"]
// 只删除,不添加
arr.splice(2, 2);  // ["C1", "D1"]  返回删除的元素
arr; // ["A", "B", "F"]
// 只添加,不删除
arr.splice(2, 0, 'X1', 'Y1');  // []  因为没有删除任何元素,因此会返回空数组
arr;  // ["A", "B", "X1", "Y1", "F"]

// 将两个数组拼接起来
let arr = ['A', 'B', 'C'];
let arr1 = arr.concat([1, 2, 3]);
arr1;  // ["A", "B", "C", 1, 2, 3]
arr;  // ["A", "B", "C"]
// 会自动把数组拆开
let arr2 = arr.concat(1, 2, [3, 4]);
arr2;  // ["A", "B", "C", 1, 2, 3, 4]

// 使用特定的字符串拼接每一个元素
let arr = ['A', 'B', 'C'];
arr.join('-');  // "A-B-C"

6. object:对象


// 声明新对象(最后一个键值对不需要在末尾加逗号,有些低版本的浏览器会报错)
let new_obj = {}
let new_obj1 = {
    name: 'alex',
    age: 26,
    city: 'Chongqing',
    'middle-school': 'No.1 Middle School'  // 如果属性名包含特殊字符,就必须用单引号括起来
}

// 获取元素
new_obj1.name;  // "alex"
new_obj1['name'];  // "alex"
new_obj1['middle-school'];  // "No.1 Middle School"

// 新增一个 tt 属性
new_obj1.tt = 'demo';  // "demo"
// 修改属性
new_obj1.tt = 'demo1';  // "demo1"
// 删除一个属性
delete new_obj1.age;  // true
new_obj1;  // {name: "alex", city: "Chongqing", middle-school: "No.1 Middle School"}

// 判断一个属性是当前对象独有的
new_obj1.hasOwnProperty('name');  // true
new_obj1.hasOwnProperty('name1');  // false

7. Map(ES6 规范定义的新的数据类型)

Map 是一组键值对的结构,具有极快的查找速度


// 声明一个空 map
let m = new Map();
let m1 = new Map([['alex', 26], ['alice', 18], ['jack', 20]]);

// 取值
m1.get('alex');  // 26
// 添加新的 key-value
m1.set('angle', 24);
// 修改指定 key 的 value
m1.set('alex', 88);  // {"alex" => 88, "alice" => 18, "jack" => 20, "angle" => 24}
// 是否存在 key 为 alex 的元素
m1.has('alex');  // true
// 删除 key 为 alex 的元素
m1.delete('alex');  // true

8. Set(ES6 规范定义的新的数据类型)

Set 和 Map 类似,也是一组 key 的集合,但不存储 value 。由于 key 不能重复,所以,在 Set 中,没有重复的 key。


// 声明一个空 Set
let s = new Set();
let s1 = new Set([1, 2, 3, 3, '3', '3', '4']);
s1;  // Set(5) {1, 2, 3, "3", "4"}  重复元素会自动被过滤

// 添加元素
s1.add(1);  // Set(5) {1, 2, 3, "3", "4"} 添加重复元素,不会有任何效果

// 删除元素
s1.delete(1);  // true
s1;  // Set(4) {2, 3, "3", "4"}

results matching ""

    No results matching ""