數(shù)據(jù)類(lèi)型
Number :不分整數(shù)、浮點(diǎn)數(shù)
字符串:?jiǎn)我?hào)、雙引號(hào)
布爾:true false
運(yùn)算符:&& 、 || 、!、
任意倆個(gè)數(shù)據(jù)類(lèi)型都可以做比較:
false == 0 雙等號(hào)會(huì)自動(dòng)轉(zhuǎn)換類(lèi)型再比較
false === 0 三等號(hào)不會(huì)自動(dòng)轉(zhuǎn)換類(lèi)型,數(shù)據(jù)類(lèi)型不一致返回false
所以比較時(shí)直接用===比較安全
NaN:是一種特殊的Number,和任何值都不等,包括它自己
NaN === NaN; // false
isNaN(NaN); // true
比較長(zhǎng)的浮點(diǎn)數(shù)比較
1/3 === (1 - 2 / 3); false
因?yàn)橛?jì)算機(jī)無(wú)法精確表示無(wú)限循環(huán)小數(shù)
Math.abs(1/3 -(1 - 2 / 3)) < 0.00001
空值:null 未定義值:undefined
trict模式
Js設(shè)計(jì)之初,不通過(guò)var申明變了,i = 20來(lái)申明變量,i就變成了全局變量了,同一個(gè)頁(yè)面的不同js文件如使用了同一個(gè)全局變量名,將會(huì)報(bào)錯(cuò)。
在js文件的第一行加上‘use strict’;編譯器會(huì)要求強(qiáng)制要求使用var 申明變量。
字符串
\n \t \
‘\x41’ 是ASCII字符的16進(jìn)制的表示形式
‘\u4e2d’是Unicode字符的16進(jìn)制
ES6中多行字符串雙引號(hào)表示多行
模版字符串:
拼接字符串用 + , ES6中可以在字符串中使用 ${name} 來(lái)組裝字符串。var message = 你好, ${name}, 你今年${age}歲了!;
字符串操作
var s = ‘hello, world!’;
s.length;
s[2]
字符串是不可變的,對(duì)字符串某個(gè)索引賦值不會(huì)有任何變化。
s[1] = H
toUpperCase() 字符串轉(zhuǎn)大寫(xiě)
toLowerCase() 字符串轉(zhuǎn)小寫(xiě)
indexOf()
s.indexOf(world); // 7
沒(méi)有找到返回 -1
substring()
數(shù)組
創(chuàng)建
var arr = [1, 2, 3, 4];
New Array (1, 2, 3, 4);
Arr.length 賦值會(huì)是數(shù)組的大小發(fā)生變化。增加undefined原屬或者刪除元素
arr[1] = 4;
賦值時(shí)索引越界會(huì)使數(shù)組大小變大。
arr.indexOf()
arr.slice(0, 3); 截取0 - 3的元素
arr.slice(3); 截取 3至結(jié)束
Arr.push(1, 2) 向末尾添加若干元素
Arr.pop() 刪除最后一個(gè)元素
Arr.unshift(1, 2); 向頭部添加若干元素
Arr.shift(); 將第一個(gè)元素刪除
arr.sort(); arr.reverse()
Arr,splice(2, 4, ‘a(chǎn)’, ‘b’, ‘c’); 刪除索引位置的元素,并在此處添加若干元素
var addArr = arr.concat(arr1); 拼接數(shù)組,并返回新數(shù)組
arr.join(‘-’) 用指定元素拼接數(shù)組中的元素,返回字符串
對(duì)象
對(duì)象是一組無(wú)序的鍵值對(duì), 實(shí)際上所有屬性名都是string類(lèi)型
var people = {
name: ‘bob’,
age: 20,
vipcode: null
‘book_name’: ‘ddd’
}
訪問(wèn)屬性,people.name
含有特殊字符的屬性名用單引號(hào)。訪問(wèn)時(shí)用 people[‘book_name’]
可以動(dòng)態(tài)綁定屬性。people.frend = ‘xiaoming’
刪除屬性, delete people.age;
判斷是含有一個(gè)屬性 name in xiaoming
判斷是不是自己的屬性,而不是繼承的屬性 xiaoming.hasOwnProperty(‘a(chǎn)ge’)
Map (ES6標(biāo)準(zhǔn))
類(lèi)似于字典。創(chuàng)建Map需要傳入一個(gè)二維數(shù)組
var m = new Map([[’michael’, 95], [‘xiaoli’, 93], [‘a(chǎn)obama’, 89], [‘lois’, 98]]);
Var m = new Map();
m.set(‘a(chǎn)lice’, 78);
m.get(‘michael’);
M.has(‘’)
m.delete(‘’)
Set (ES6標(biāo)準(zhǔn))
Set 和 map 類(lèi)似,set中只有key,且會(huì)自動(dòng)過(guò)濾重復(fù)元素
創(chuàng)建Set需要傳入一個(gè)一維數(shù)組
var s = new Set();
Var s = new Set([1, 3, 5]);
iterable (ES6標(biāo)準(zhǔn))
Map 和 Set 不能使用帶下標(biāo)的for循環(huán)來(lái)遍歷,需要用for .. of ..來(lái)遍歷,因?yàn)锳rray、Map、Set都是iterable類(lèi)型。
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
for (var x of m) { // 遍歷Map
console.log(x[0] + '=' + x[1]);
}
for of 與 for in 的區(qū)別:
for of 只會(huì)遍歷Array的元首,for in 會(huì)遍歷Array的所有屬性。
由于Array其實(shí)也是一個(gè)對(duì)象,每一元素都是Array的屬性,可以動(dòng)態(tài)的添加屬性,但是動(dòng)態(tài)添加的屬性卻不是Array的元素。
var a = ['A', 'B', 'C'];
a.name = 'Hello';
for (var x in a) {
console.log(x); // '0', '1', '2', 'name'
}
iterable類(lèi)型自帶forEach(callBack)函數(shù), ES5.1標(biāo)準(zhǔn)
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
m.forEach(function (value, key, map) {
console.log(value);
});
Map的回調(diào)函數(shù)參數(shù)依次為value、key和map本身
Set與Array類(lèi)似,但Set沒(méi)有索引,因此回調(diào)函數(shù)的前兩個(gè)參數(shù)都是元素本身