JavaScript 標(biāo)準(zhǔn)庫

參考基礎(chǔ)教程的整理,方便記憶

一酝掩、Object對象 (O大寫)

  • 所有其他對象都繼承自這個對象屿笼。Object本身也是一個構(gòu)造函數(shù),可以直接通過它來生成新對象骚灸。
    • 作為構(gòu)造函數(shù)使用時糟趾,可以接受一個參數(shù)。參數(shù)若為對象甚牲,則直接返回原對象义郑;若是一個原始類型的值,則返回該值對應(yīng)的包裝對象丈钙。
  • Object.keys(只返回可枚舉的屬性)和Object.getOwnPropertyNames(返回不可枚舉的屬性名非驮。),一般用來遍歷對象的屬性雏赦。
    • 參數(shù)都是一個對象劫笙,都返回一個數(shù)組,該數(shù)組的成員都是對象自身的(而不是繼承的)所有屬性名星岗。
    • 一般都使用Object.keys方法填大,遍歷數(shù)組的屬性。
var a = ["Hello", "World"];

Object.keys(a)
// ["0", "1"]

Object.getOwnPropertyNames(a)
// ["0", "1", "length"]
  • 對象屬性模型的相關(guān)方法

    • Object.getOwnPropertyDescriptor():獲取某個屬性的attributes對象俏橘。
    • Object.defineProperty():通過attributes對象允华,定義某個屬性。
    • Object.defineProperties():多個屬性。
    • Object.getOwnPropertyNames():返回直接定義在某個對象上面的全部屬性的名稱靴寂。
  • 控制對象狀態(tài)的方法

    • Object.preventExtensions():防止對象擴(kuò)展磷蜀。
    • Object.isExtensible():判斷對象是否可擴(kuò)展。
    • Object.seal():禁止對象配置榨汤。
    • Object.isSealed():判斷一個對象是否可配置蠕搜。
    • Object.freeze():凍結(jié)一個對象。
    • Object.isFrozen():判斷一個對象是否被凍結(jié)收壕。
  • 原型鏈相關(guān)方法

    • Object.create():指定原型對象和屬性妓灌,返回一個新的對象。
    • Object.getPrototypeOf():獲取對象的Prototype對象蜜宪。
  • Object實(shí)例對象的方法虫埂,主要有以下六個。

    • valueOf():返回當(dāng)前對象對應(yīng)的值圃验。
    • toString():返回當(dāng)前對象對應(yīng)的字符串形式掉伏。
    • toLocaleString():本地字符串形式。
      hasOwnProperty():判斷某個屬性是否為當(dāng)前對象自身的屬性澳窑,還是繼承自原型對象的屬性斧散。
    • isPrototypeOf():判斷當(dāng)前對象是否為另一個對象的原型。
    • propertyIsEnumerable():判斷某個屬性是否可枚舉摊聋。
  • Object.prototype.valueOf()作用是返回一個對象的“值”鸡捐,默認(rèn)情況下返回對象本身。

var o = new Object();
o.valueOf() === o // true
  • Object.prototype.toString()作用是返回一個對象的字符串形式麻裁,默認(rèn)情況下返回類型字符串箍镜。也可判斷數(shù)據(jù)類型。

二煎源、Array 對象

  • Array是JavaScript的內(nèi)置對象色迂,同時也是一個構(gòu)造函數(shù),可以用它生成新的數(shù)組手销。(不同的參數(shù)歇僧,會導(dǎo)致它的行為不一致。)
  • Array.isArray()用來判斷一個值是否為數(shù)組锋拖。
var a = [1, 2, 3];

typeof a // "object"
Array.isArray(a) // true
//typeof運(yùn)算符只能顯示數(shù)組-的類型是Object馏慨,而Array.isArray方法可以對數(shù)組返回true。
  • valueOf返回數(shù)組本身姑隅。toString返回數(shù)組的字符串形式写隶。
  • push方法用于在數(shù)組的末端添加一個或多個元素,并返回添加新元素后的數(shù)組長度讲仰。會改變原數(shù)組慕趴。
var a = [];
a.push(1) 
//合并兩個數(shù)組
var a = [1, 2, 3];
var b = [4, 5, 6];

Array.prototype.push.apply(a, b)
// 或者
a.push.apply(a, b)

// 等同于
a.push(4, 5, 6)

a // [1, 2, 3, 4, 5, 6]
  • 可向?qū)ο筇砑釉兀砑雍蟮膶ο笞兂深愃茢?shù)組的對象,即新加入元素的鍵對應(yīng)數(shù)組的索引冕房,并且對象有一個length屬性躏啰。
var a = {a: 1};

[].push.call(a, 2);
a // {a:1, 0:2, length: 1}

[].push.call(a, [3]);
a // {a:1, 0:2, 1:[3], length: 2}
  • pop方法用于刪除數(shù)組的最后一個元素,并返回該元素耙册。注意给僵,該方法會改變原數(shù)組。
    • 對空數(shù)組使用pop方法详拙,不會報錯帝际,而是返回undefined。
    • push和pop結(jié)合使用饶辙,就構(gòu)成了“后進(jìn)先出”的棧結(jié)構(gòu)(stack)蹲诀。
  • join方法以參數(shù)作為分隔符,將所有數(shù)組成員組成一個字符串返回弃揽。如果不提供參數(shù)脯爪,默認(rèn)用逗號分隔
var a = [1, 2, 3, 4];

a.join(' ') // '1 2 3 4'
a.join(' | ') // "1 | 2 | 3 | 4"
a.join() // "1,2,3,4"
  • concat方法用于多個數(shù)組的合并。它將新數(shù)組的成員矿微,添加到原數(shù)組的尾部痕慢,然后返回一個新數(shù)組,原數(shù)組不變涌矢。

  • shift用于刪除數(shù)組的第一個元素守屉,并返回該元素。注意蒿辙,該方法會改變原數(shù)組。

    • shift可以遍歷并清空一個數(shù)組滨巴。
    • push和shift結(jié)合使用思灌,就構(gòu)成了“先進(jìn)先出”的隊(duì)列結(jié)構(gòu)(queue)。
  • unshift方法用于在數(shù)組的第一個位置添加元素(可多個)恭取,并返回添加新元素后的數(shù)組長度泰偿。會改變原數(shù)組。

  • reverse用于顛倒數(shù)組中元素的順序蜈垮,返回改變后的數(shù)組耗跛。改變原數(shù)組。

  • slice(起始攒发,終止(不包含在內(nèi)))用于提取原數(shù)組的一部分调塌,返回一個新數(shù)組,原數(shù)組不變惠猿。

    • 若參數(shù)是負(fù)數(shù)羔砾,則表示倒數(shù)計(jì)算的位置。
    • 如果參數(shù)值大于數(shù)組成員的個數(shù),或者第二個參數(shù)小于第一個參數(shù)姜凄,則返回空數(shù)組政溃。
  • splice(起始,個數(shù)态秧,被插入數(shù)組的新元素(可有可無))刪除原數(shù)組的一部分成員董虱,并可以在被刪除的位置添加入新的數(shù)組成員,返回值是被刪除的元素申鱼。會改變原數(shù)組愤诱。

  • sort方法對數(shù)組成員進(jìn)行排序,默認(rèn)是按照字典順序排序润讥。排序后转锈,原數(shù)組將被改變。數(shù)值會被先轉(zhuǎn)成字符串楚殿。

  • map方法對數(shù)組的所有成員依次調(diào)用一個函數(shù)撮慨,根據(jù)函數(shù)結(jié)果返回一個新數(shù)組。原數(shù)組沒有變化脆粥。

    • 遍歷字符串的每個字符要通過函數(shù)的call方法間接使用砌溺,或者先將字符串轉(zhuǎn)為數(shù)組。
    • 接受一個函數(shù)作為參數(shù)变隔。該函數(shù)調(diào)用時规伐,map方法會將其傳入三個參數(shù),分別是當(dāng)前成員匣缘、當(dāng)前位置和數(shù)組本身猖闪。
    • map方法不會跳過undefined和null,但是會跳過空位.
  • forEach與map很相似肌厨,但無返回值培慌。(可接受第二個參數(shù),用來綁定回調(diào)函數(shù)的this關(guān)鍵字柑爸。)

    • forEach無法中斷執(zhí)行吵护,會將所有成員遍歷完。若需符合某種條件時表鳍,中斷遍歷馅而,用for循環(huán)。
  • filter的參數(shù)是一個函數(shù)譬圣,所有數(shù)組成員依次執(zhí)行該函數(shù)瓮恭,返回結(jié)果為true的成員組成一個新數(shù)組返回秀菱。該方法不會改變原數(shù)組讶请。

  • some(),every()用來判斷數(shù)組成員是否符合某種條件

    • every則是所有數(shù)組成員的返回值都是true雕沉,才返回true。
    • some是只要有一個數(shù)組成員的返回值是true則為ture颇玷。
  • reduce方法和reduceRight方法依次處理數(shù)組的每個成員笨农,最終累計(jì)為一個值。它們的差別是帖渠,reduce是從左到右處理谒亦,reduceRight相反
    第一個參數(shù)都是一個函數(shù)。該函數(shù)接受以下四個參數(shù)空郊。

    • 累積變量份招,默認(rèn)為數(shù)組的第一個成員(必須)
    • 當(dāng)前變量,默認(rèn)為數(shù)組的第二個成員(必須)
    • 當(dāng)前位置(從0開始)(可選)
    • 原數(shù)組(可選)
  • indexOf方法返回給定元素在數(shù)組中第一次出現(xiàn)的位置狞甚,如果沒有出現(xiàn)則返回-1锁摔。indexOf方法還可以接受第二個參數(shù),表示搜索的開始位置哼审。

  • lastIndexOf方法返回給定元素在數(shù)組中最后一次出現(xiàn)的位置谐腰,如果沒有出現(xiàn)則返回-1。如果數(shù)組中包含NaN涩盾,這兩個方法不適用十气,即無法確定數(shù)組成員是否包含NaN。

三春霍、包裝對象

var v1 = new Number(123);
var v2 = new String('abc');
var v3 = new Boolean(true);
//生成了三個對象砸西,與原始值的類型不同。

typeof v1 // "object"
typeof v2 // "object"
typeof v3 // "object"

v1 === 123 // false
v2 === 'abc' // false
v3 === true // false
  • valueOf方法返回包裝對象實(shí)例對應(yīng)的原始類型的值址儒。
new Number(123).valueOf()  // 123
new String("abc").valueOf() // "abc"
new Boolean("true").valueOf() // tru
  • toString方法返回實(shí)例對應(yīng)的字符串形式
  • 原始類型的自動轉(zhuǎn)換
'abc'.length // 3
//abc是一個字符串芹枷,本身不是對象,不能調(diào)用length屬性莲趣。
//自動將其轉(zhuǎn)為包裝對象鸳慈,調(diào)用length屬性。
//調(diào)用結(jié)束后妖爷,這個臨時對象就會被銷毀。
//只讀的理朋,無法修改絮识。字符串無法添加新屬性。
'abc'.charAt === String.prototype.charAt
// true
  • 如果包裝對象與原始類型值進(jìn)行混合運(yùn)算嗽上,包裝對象會轉(zhuǎn)化為原始類型(實(shí)際是調(diào)用自身的valueOf方法)次舌。
new Number(123) + 123 // 246
new String('abc') + 'abc' // "abcabc"
  • Boolean 對象
if (new Boolean(false)) {
  console.log('true');
} // true
// false對應(yīng)的包裝對象實(shí)例是一個對象,進(jìn)行邏輯運(yùn)算時兽愤,
//被自動轉(zhuǎn)化成布爾值true(所有對象對應(yīng)的布爾值都是true)
if (new Boolean(false).valueOf()) {
  console.log('true');
} // 無輸出
//實(shí)例的valueOf方法彼念,則返回實(shí)例對應(yīng)的原始值挪圾,本例為false。
if (Boolean(null)) {
  console.log('true');
} // 無輸出

if (new Boolean(null)) {
  console.log('true');
} // true
//對于一些特殊值逐沙,Boolean對象前面加不加new
//會得到完全相反的結(jié)果

四哲思、 Number對象

  • 數(shù)值對應(yīng)的包裝對象,可以作為構(gòu)造函數(shù)使用(用于生成值為數(shù)值的對象吩案。)棚赔,也可以作為工具函數(shù)使用。
var n = new Number(1);
typeof n // "object"
  • Number對象的屬性
    • Number.POSITIVE_INFINITY:正的無限徘郭,指向Infinity靠益。
    • Number.NEGATIVE_INFINITY:負(fù)的無限,指向-Infinity残揉。
    • Number.NaN:表示非數(shù)值胧后,指向NaN。
    • Number.MAX_VALUE:最大的正數(shù)抱环,最小的負(fù)數(shù)為-Number.MAX_VALUE壳快。
    • Number.MIN_VALUE:表示最小的正數(shù)(即最接近0的正數(shù),在64位浮點(diǎn)數(shù)體系中為5e-324)江醇,最接近0的負(fù)數(shù)為-Number.MIN_VALUE濒憋。
    • Number.MAX_SAFE_INTEGER:表示能夠精確表示的最大整數(shù),即9007199254740991陶夜。
    • Number.MIN_SAFE_INTEGER:最小整數(shù)凛驮,-9007199254740991。
  • Number.prototype.toString()
    接受一個參數(shù)条辟,表示輸出的進(jìn)制黔夭。如果省略這個參數(shù),默認(rèn)將數(shù)值先轉(zhuǎn)為十進(jìn)制羽嫡,再輸出字符串
(10).toString(2) // "1010"
(10).toString(8) // "12"
//前面的數(shù)值要加括號或加兩個點(diǎn)(即理解為10.0.)
10..toString(2)
10 .toString(2) // "1010"
10.0.toString(2) // "1010"
  • Number.prototype.toFixed()
    • 轉(zhuǎn)為指定位數(shù)的小數(shù)本姥,返回這個小數(shù)對應(yīng)的字符串。
      參數(shù)為指定的小數(shù)位數(shù)杭棵,有效范圍為0到20婚惫,超出這個范圍將拋出RangeError錯誤。
  • Number.prototype.toExponential()
    • 將一個數(shù)轉(zhuǎn)為科學(xué)計(jì)數(shù)法形式魂爪。
    • 參數(shù)表示小數(shù)點(diǎn)后有效數(shù)字的位數(shù)先舷,范圍為0到20,超出這個范圍滓侍,會拋出一個RangeError蒋川。
  • Number.prototype.toPrecision()
    • 將一個數(shù)轉(zhuǎn)為指定位數(shù)的有效數(shù)字參數(shù)為有效數(shù)字的位數(shù),范圍是1到21撩笆,超出這個范圍會拋出RangeError錯誤(不太可靠捺球,跟浮點(diǎn)數(shù)不是精確儲存有關(guān)缸浦。)
  • 自定義方法

五、String對象

  • 生成字符串的包裝對象氮兵。
  • 實(shí)際上裂逐,字符串的包裝對象是一個類似數(shù)組的對象(即很像數(shù)組,實(shí)質(zhì)上不是數(shù)組)胆剧。
new String("abc")
// String {0: "a", 1: "b", 2: "c", length: 3}
  • String對象還可將任意類型的值轉(zhuǎn)為字符串絮姆。
  • String.fromCharCode()
    • String對象提供的靜態(tài)方法(即定義在對象本身,而非對象實(shí)例)秩霍,主要是fromCharCode()篙悯。參數(shù)是一系列Unicode碼點(diǎn)(傳入的參數(shù)不能大于0xFFFF),返回對應(yīng)的字符串铃绒。
  • charAt()返回指定位置的字符鸽照,參數(shù)是從0開始編號的位置。
  • charCodeAt方法返回給定位置字符的Unicode碼點(diǎn)(十進(jìn)制表示)颠悬,相當(dāng)于String.fromCharCode()的逆操作矮燎。
    • charCodeAt方法返回的Unicode碼點(diǎn)不大于65536(0xFFFF)(兩個字節(jié)的字符的碼點(diǎn))。否則必需連續(xù)使用兩次charCodeAt赔癌,讀入charCodeAt(i)诞外,和charCodeAt(i+1),將兩個16字節(jié)放在一起灾票,才能得到準(zhǔn)確的字符峡谊。
    • 如果參數(shù)為負(fù)數(shù),或大于等于字符串的長度刊苍,charCodeAt返回NaN既们。
  • concat方法用于連接兩個字符串,返回一個新字符串正什,不改變原字符串啥纸。
'a'.concat('b', 'c') // "abc"
//可以接受多個參數(shù)

六、Math對象

  • 該對象不是構(gòu)造函數(shù)婴氮,不能生成實(shí)例斯棒,所有的屬性和方法都必須在Math對象上調(diào)用。

  • 屬性

    • Math.E:常數(shù)e主经。
    • Math.LN2:2的自然對數(shù)荣暮。
    • Math.LN10:10的自然對數(shù)。
    • Math.LOG2E:以2為底的e的對數(shù)旨怠。
    • Math.LOG10E:以10為底的e的對數(shù)渠驼。
    • Math.PI:常數(shù)Pi蜈块。
    • Math.SQRT1_2:0.5的平方根鉴腻。
    • Math.SQRT2:2的平方根迷扇。
  • 方法

    • Math.abs():絕對值
    • Math.ceil():向上取整
    • Math.floor():向下取整
    • Math.max():最大值
    • Math.min():最小值
    • Math.pow():指數(shù)運(yùn)算
    • Math.sqrt():平方根
    • Math.log():自然對數(shù)
    • Math.exp():e的指數(shù)
    • Math.round():四舍五入
    • Math.random():隨機(jī)數(shù)
  • 三角函數(shù)方法

    • Math.sin():返回參數(shù)的正弦
    • Math.cos():返回參數(shù)的余弦
    • Math.tan():返回參數(shù)的正切
    • Math.asin():返回參數(shù)的反正弦(弧度值)
    • Math.acos():返回參數(shù)的反余弦(弧度值)
    • Math.atan():返回參數(shù)的反正切(弧度值)

七、Date對象

  • 日期和時間的操作接口爽哎◎严可表示1970年1月1日00:00:00前后的各1億天(單位為毫秒)。
Date()
// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)"
//可作為普通函數(shù)直接調(diào)用课锌,返回一個代表當(dāng)前時間的字符串厨内。
Date(2000, 1, 1)
// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)"
//即使帶有參數(shù),Date作為普通函數(shù)使用時渺贤,返回的還是當(dāng)前時間雏胃。
  • 可當(dāng)構(gòu)造函數(shù)使用。使用new命令志鞍,會返回一個Date對象的實(shí)例瞭亮。不加參數(shù),生成代表當(dāng)前時間的對象固棚。
var today = new Date();
var today = new Date();

today
// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)"

// 等同于
today.toString()
// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)"
//這個Date實(shí)例對應(yīng)的字符串值统翩,就是當(dāng)前時間。
  • new Date(milliseconds)

    • Date對象接受從1970年1月1日00:00:00 UTC開始計(jì)算的毫秒數(shù)作為參數(shù)此洲。Unix時間戳(單位為秒)作為參數(shù)厂汗,須將Unix時間戳乘以1000。
new Date(1378218728000)
// Tue Sep 03 2013 22:32:08 GMT+0800 (CST)

// 1970年1月2日的零時
var Jan02_1970 = new Date(3600 * 24 * 1000);
// Fri Jan 02 1970 08:00:00 GMT+0800 (CST)

// 1969年12月31日的零時
var Dec31_1969 = new Date(-3600 * 24 * 1000);
// Wed Dec 31 1969 08:00:00 GMT+0800 (CST)
//Date構(gòu)造函數(shù)的參數(shù)可以是一個負(fù)數(shù)呜师,表示1970年1月1日之前的時間娶桦。
  • new Date(datestring),(month day, year hours:minutes:seconds)接受一個日期字符串作為參數(shù),返回所對應(yīng)的時間匣掸。
new Date('January 6, 2013');
// Sun Jan 06 2013 00:00:00 GMT+0800 (CST)
//省略了小時趟紊、分鐘或秒數(shù)會被設(shè)為0。
  • 月份從0開始計(jì)算碰酝,但是霎匈,天數(shù)從1開始計(jì)算。另外送爸,除了日期默認(rèn)為1铛嘱,小時、分鐘袭厂、秒鐘和毫秒默認(rèn)都是0墨吓。
  • 最少需要提供兩個參數(shù)(年和月),其他參數(shù)都是可選的纹磺,默認(rèn)等于0帖烘。
new Date(2013)
// Thu Jan 01 1970 08:00:02 GMT+0800 (CST)
//只有一個參數(shù),2013被解釋為毫秒數(shù)橄杨,而不是年份秘症。
new Date(2013, 15)
// Tue Apr 01 2014 00:00:00 GMT+0800 (CST)
//這些參數(shù)如果超出了正常范圍照卦,會被自動折算。
new Date(2013, 0, -1)
// Sun Dec 30 2012 00:00:00 GMT+0800 (CST)
//參數(shù)還可以使用負(fù)數(shù)乡摹,表示扣去的時間役耕。
new Date(1, 0)
// Tue Jan 01 1901 00:00:00 GMT+0800 (CST)

new Date(-1, 0)
// Fri Jan 01 -1 00:00:00 GMT+0800 (CST)
//年份如果是0到99,會自動加上1900聪廉。
//如果為負(fù)數(shù)瞬痘,則表示公元前。
  • 類型轉(zhuǎn)換時板熊,Date對象的實(shí)例如果轉(zhuǎn)為數(shù)值框全,則等于對應(yīng)的毫秒數(shù);如果轉(zhuǎn)為字符串干签,則等于對應(yīng)的日期字符串竣况。
d1 = new Date(2000, 2, 1);
var d2 = new Date(2000, 3, 1);

d2 - d1
// 2678400000
//減法運(yùn)算,返回的就是它們間隔的毫秒數(shù)
d2 + d1
// "Sat Apr 01 2000 00:00:00 GMT
//+0800 (CST)Wed Mar 01 2000 00:00:00 GMT+0800 (CST)"
//加法運(yùn)算筒严,返回的就是連接后的兩個字符串
  • Date.now返回當(dāng)前距離1970年1月1日 00:00:00 UTC的毫秒數(shù)(Unix時間戳乘以1000)丹泉。
Date.now() // 1364026285194
  • Date.parse方法用來解析日期字符串,返回距離1970年1月1日 00:00:00的毫秒數(shù)標(biāo)準(zhǔn)YYYY-MM-DDTHH:mm:ss.sssZ鸭蛙,其他格式也可以被解析摹恨。
  • Date對象返回當(dāng)前時區(qū)的時間。Date.UTC可以返回UTC時間(世界標(biāo)準(zhǔn)時間)娶视。
// 格式
Date.UTC(year, month[, date[, hrs[, min[, sec[, ms]]]]])

// 用法
Date.UTC(2011, 0, 1, 2, 3, 4, 567)
// 1293847384567
  • Date實(shí)例對象的方法
  • to類:從Date對象返回一個字符串晒哄,表示指定的時間。
    • Date.prototype.toString()返回一個完整的日期字符串
    • Date.prototype.toUTCString()返回對應(yīng)的UTC時間肪获,比北京時間晚8個小時寝凌。
    • Date.prototype.toISOString()返回對應(yīng)時間的ISO8601寫法。(UTC時區(qū))
    • Date.prototype.toJSON()返回一個符合JSON格式的ISO格式的日期字符串孝赫,與toISOString相同较木。
    • Date.prototype.toDateString()返回日期字符串。
    • Date.prototype.toTimeString()返回時間字符串青柄。
    • Date.prototype.toLocaleDateString()返回一個字符串伐债,代表日期的當(dāng)?shù)貙懛ā?/li>
    • Date.prototype.toLocaleTimeString()返回一個字符串,代表時間的當(dāng)?shù)貙懛ā?/li>
  • get類:獲取Date對象的日期和時間致开。
    • getTime():返回距離1970年1月1日00:00:00的毫秒數(shù)峰锁,等同于valueOf方法。
    • getDate():返回實(shí)例對象對應(yīng)每個月的幾號(從1開始)双戳。
    • getDay():返回星期幾虹蒋,星期日為0,星期一為1,以此類推魄衅。
    • getYear():返回距離1900的年數(shù)耍目。
    • getFullYear():返回四位的年份。
    • getMonth():返回月份(0表示1月徐绑,11表示12月)。
    • getHours():返回小時(0-23)莫辨。
    • getMilliseconds():返回毫秒(0-999)傲茄。
    • getMinutes():返回分鐘(0-59)。
    • getSeconds():返回秒(0-59)沮榜。
    • getTimezoneOffset():返回當(dāng)前時間與UTC的時區(qū)差異盘榨,以分鐘表示,返回結(jié)果考慮到了夏令時因素蟆融。
      這些get*方法返回的都是當(dāng)前時區(qū)的時間
  • Date對象還提供了這些方法對應(yīng)的UTC版本草巡,用來返回UTC時間。
    • getUTCDate()
    • getUTCFullYear()
    • getUTCMonth()
    • getUTCDay()
    • getUTCHours()
    • getUTCMinutes()
    • getUTCSeconds()
    • getUTCMilliseconds()
  • set類:設(shè)置Date對象的日期和時間型酥。
    • setDate(date):設(shè)置實(shí)例對象對應(yīng)的每個月的幾號(1-31)山憨,返回改變后毫秒時間戳。
    • setYear(year): 設(shè)置距離1900年的年數(shù)弥喉。
    • setFullYear(year [, month, date]):設(shè)置四位年份郁竟。
    • setHours(hour [, min, sec, ms]):設(shè)置小時(0-23)。
    • setMilliseconds():設(shè)置毫秒(0-999)由境。
    • setMinutes(min [, sec, ms]):設(shè)置分鐘(0-59)棚亩。
    • setMonth(month [, date]):設(shè)置月份(0-11)。
    • setSeconds(sec [, ms]):設(shè)置秒(0-59)虏杰。
    • setTime(milliseconds):設(shè)置毫秒時間戳讥蟆。
      這些跟get*方法一一對應(yīng)的,但是沒有setDay方法纺阔,因?yàn)樾瞧趲资怯?jì)算出來的瘸彤,而不是設(shè)置的。
var d2 = new Date ('January 6, 2013');
d2.setDate(-1) // 1356796800000
d2 // Sun Dec 30 2012 00:00:00 GMT+0800 (CST)
//set*方法的參數(shù)都會自動折算
//參數(shù)超過當(dāng)月的最大天數(shù)笛钝,向下一個月順延
//參數(shù)是負(fù)數(shù)钧栖,從上個月的最后一天開始減去的天數(shù)。
  • set*系列方法除了setTime()和setYear()婆翔,都有對應(yīng)的UTC版本拯杠,即設(shè)置UTC時區(qū)的時間。
    • setUTCDate()
    • setUTCFullYear()
    • setUTCHours()
    • setUTCMilliseconds()
    • setUTCMinutes()
    • setUTCMonth()
    • setUTCSeconds()
  • Date.prototype.valueOf()返回實(shí)例對象距離1970年1月1日00:00:00 UTC對應(yīng)的毫秒數(shù)啃奴,該方法等同于getTime方法潭陪。可以用于計(jì)算精確時間。
var d = new Date();
d.valueOf() // 1362790014817
d.getTime() // 1362790014817

八依溯、RegExp對象

  • 正則表達(dá)式(regular expression)是一種表達(dá)文本模式(即字符串結(jié)構(gòu))的方法老厌。
var regex = /xyz/;
//使用字面量,以斜杠表示開始和結(jié)束黎炉。編譯時新建正則表達(dá)式
var regex = new RegExp('xyz');
//使用 RegExp 構(gòu)造函數(shù)枝秤。運(yùn)行時新建正則表達(dá)式。
  • 可以接受第二個參數(shù)慷嗜,表示修飾符
var regex = new RegExp('xyz', "i");
// 等價于
var regex = /xyz/i;
  • 1.屬性
  • 修飾符相關(guān)淀弹,返回布爾值,表示是否設(shè)置庆械。
    • ignoreCase:i
    • global:g
    • multiline:m
      返回布爾值薇溃,表示是否設(shè)置了i,g,m修飾符,該屬性只讀缭乘。
  • 與修飾符無關(guān)的屬性沐序。
    • lastIndex:返回下一次開始搜索的位置《榧ǎ可讀寫策幼,只在設(shè)置了g修飾符時有意義。
    • source:返回正則表達(dá)式的字符串形式(不包括反斜杠)奴紧,只讀垄惧。
  • test()返回一個布爾值,表示當(dāng)前模式是否能匹配參數(shù)字符串绰寞。
/cat/.test('cats and dogs') // true
  • exec()返回匹配結(jié)果到逊。若匹配,返回一個數(shù)組(每一個匹配成功的子字符串)滤钱,否則返回null觉壶。
    exec方法的返回數(shù)組包含屬性:
    • input:整個原字符串。
    • index:整個模式匹配成功的開始位置(從0開始計(jì)數(shù))件缸。
  • 字符串對象的方法
    • match():返回一個數(shù)組(所有匹配的子字符串铜靶。)
    • search():搜索,返回一個整數(shù)他炊,表示匹配開始的位置争剿。
    • replace():替換,返回替換后的字符串痊末。
    • split():分割蚕苇,返回一個數(shù)組(分割后的各個成員。)
  • 如果正則表達(dá)式帶有g(shù)修飾符凿叠,則該方法與正則對象的exec方法行為不同涩笤,會一次性返回所有匹配成功的結(jié)果嚼吞。
  • String.prototype.search(搜索模式,替換的內(nèi)容)蹬碧,返回第一個滿足條件的匹配結(jié)果在整個字符串中的位置舱禽,可替換。如果沒有任何匹配返回-1恩沽。
'aaa'.replace('a', 'b') // "baa"
'aaa'.replace(/a/, 'b') // "baa"
//不加g修飾符誊稚,就替換第一個匹配成功的值
'aaa'.replace(/a/g, 'b') // "bbb"
//否則替換所有匹配成功的值。
  • replace方法的第二個參數(shù)可以使用美元符號$罗心,用來指代所替換的內(nèi)容里伯。
    • $& 指代匹配的子字符串。
    • $` 指代匹配結(jié)果前面的文本协屡。
    • $' 指代匹配結(jié)果后面的文本。
    • $n 指代匹配成功的第n(從1開始)組內(nèi)容全谤。
    • $$ 指代美元符號$肤晓。
  • String.prototype.split()按照正則規(guī)則分割字符串,返回一個由分割后的各個部分組成的數(shù)組认然。
    • str.split(separator, [limit])(分隔規(guī)則补憾,返回數(shù)組的最大成員數(shù))
// 非正則分隔
'a,  b,c, d'.split(',')
// [ 'a', '  b', 'c', ' d' ]

// 正則分隔,去除多余的空格
'a,  b,c, d'.split(/, */)
// [ 'a', 'b', 'c', 'd' ]

// 指定返回數(shù)組的最大成員
'a,  b,c, d'.split(/, */, 2)
[ 'a', 'b' ]

匹配規(guī)則

  • 1.字面量字符(只表示它字面的含義)和元字符(有特殊含義卷员,不代表字面的意思)
  • 元字符
    • 點(diǎn)字符(.)匹配除回車(\r)盈匾、換行(\n) 、行分隔符(\u2028)和段分隔符(\u2029)以外的所有字符毕骡。
/c.t/
//c.t匹配c和t之間包含任意一個字符的情況
//只要這三個字符在同一行削饵,比如cat、c2t未巫、c-t等等窿撬,但是不匹配coot
  • 位置字符用來提示字符所處的位置,主要有兩個字符叙凡。
    • ^ 表示字符串的開始位置
    • $ 表示字符串的結(jié)束位置
  • 選擇符(|)
    豎線符號(|)在正則表達(dá)式中表示“或關(guān)系”(OR)劈伴,即cat|dog表示匹配cat或dog。
    1. 轉(zhuǎn)義符
      正則表達(dá)式中那些有特殊含義的字符握爷,如果要匹配它們本身跛璧,就需要在它們前面要加上反斜杠。比如要匹配加號新啼, \ +追城。
/1+1/.test('1+1')
// false

/1\+1/.test('1+1')
// true
  • 正則模式中,需要用斜杠轉(zhuǎn)義的燥撞,一共有12個字符:^漓柑、.、[、$辆布、(瞬矩、)、|锋玲、*景用、+、?惭蹂、{ 和 \ \伞插,需要特別注意的是,如果使用RegExp方法生成正則對象盾碗,轉(zhuǎn)義需要使用兩個斜杠媚污,因?yàn)樽址畠?nèi)部會先轉(zhuǎn)義一次。
(new RegExp('1\+1')).test('1+1')
// false

(new RegExp('1\\+1')).test('1+1')
// true
    1. 特殊字符
      \cX 表示Ctrl-[X]廷雅,其中的X是A-Z之中任一個英文字母耗美,用來匹配控制字符。
      [\b] 退格鍵(U+0008)航缀,不要與\b混淆商架。
      \n 換行鍵。
      \r 回車鍵芥玉。
      \t 制表符tab(U+0009)蛇摸。
      \v 垂直制表符(U+000B)。
      \f 換頁符(U+000C)灿巧。
      \0 null字符(U+0000)赶袄。
      \xhh 匹配一個以兩位十六進(jìn)制數(shù)(\x00-\xFF)表示的字符。
      \uhhhh 匹配一個以四位十六進(jìn)制數(shù)(\u0000-\uFFFF)表示的unicode字符抠藕。
  • 4.字符類(class)
    • 表示有一系列字符可供選擇弃鸦,只要匹配其中一個就可以了。所有可供選擇的字符都放在方括號內(nèi)幢痘,如[xyz] 表示x唬格、y、z之中任選一個匹配颜说。
  • 脫字符(^)
    如果方括號內(nèi)的第一個字符是[ ^ ]购岗,則表示除了字符類之中的字符,其他字符都可以匹配门粪。比如喊积,[^xyz]表示除了x、y玄妈、z之外都可以匹配乾吻。
    • 脫字符只有在字符類的第一個位置才有特殊含義髓梅,否則就是字面含義
  • 連字符(-)
    表示字符的連續(xù)范圍。[abc]可以寫成[a-c]
    1. 預(yù)定義模式
    • \d [0-9]绎签。
    • \D 0-9以外枯饿,[^0-9]。
    • \w 任意的字母诡必、數(shù)字和下劃線奢方,[A-Za-z0-9_]。
    • \W [^A-Za-z0-9_]爸舒。
    • \s 匹配空格(包括制表符蟋字、空格符、斷行符等)扭勉,相等于[\t\r\n\v\f]鹊奖。
    • \S [^\t\r\n\v\f]。
    • \b 匹配詞的邊界涂炎。
    • \B 匹配非詞邊界忠聚,即在詞的內(nèi)部。
      正則表達(dá)式遇到換行符(\n)就會停止匹配璧尸。
  • 6.重復(fù)類
    模式的精確匹配次數(shù)咒林,使用大括號({ })表示熬拒。{n}恰好重復(fù)n次爷光,{n,}至少重復(fù)n次,{n,m}不少于n次澎粟,不多于m次蛀序。
    1. 量詞符用來設(shè)定某個模式出現(xiàn)的次數(shù)。
    • ? 問號表示某個模式出現(xiàn)0次或1次活烙,等同于{0, 1}徐裸。
    • *星號表示某個模式出現(xiàn)0次或多次,等同于{0,}啸盏。
    • +加號表示某個模式出現(xiàn)1次或多次重贺,等同于{1,}。
  • 8 .貪婪模式
    回懦? * + 默認(rèn)情況下都是最大可能匹配气笙,即匹配直到下一個字符不滿足匹配規(guī)則為止。
var s = 'aaa';
s.match(/a+/) // ["aaa"]
//因?yàn)槟J(rèn)是貪婪模式怯晕,會一直匹配到字符a不出現(xiàn)為止潜圃,所以匹配結(jié)果是3個a
  • 9.修飾符(modifier)
    模式的附加規(guī)則,放在正則模式的最尾部舟茶。 可單個使用或多個一起使用谭期。
    • g修飾符
      默認(rèn)情況下堵第,第一次匹配成功后,正則對象就停止向下匹配了隧出。g修飾符表示全局匹配(global)踏志,加上它以后,正則對象將匹配全部符合條件的結(jié)果鸳劳,主要用于搜索和替換狰贯。
    • i修飾符
      默認(rèn)情況下,正則對象區(qū)分字母的大小寫赏廓,加上i修飾符以后表示忽略大小寫(ignorecase)涵紊。
    • m修飾符
      表示多行模式(multiline),會修改 ^ 和$的行為幔摸。默認(rèn)情況下(即不加m修飾符時)摸柄,^ 和$匹配字符串的開始處和結(jié)尾處,加上m修飾符以后既忆,^ 和$還會匹配行首和行尾驱负,即識別換行符(\n)。
    1. 組匹配
  • 正則表達(dá)式的括號表示分組匹配患雇,括號中的模式可以用來匹配分組的內(nèi)容跃脊。
/fred+/.test('fredd') // true
//沒有括號,結(jié)果+只表示重復(fù)字母d
/(fred)+/.test('fredfred') // true
//有括號苛吱,結(jié)果+就表示匹配“fred”這個詞酪术。
  • 使用組匹配時,不宜同時使用g修飾符翠储,否則match方法不會捕獲分組的內(nèi)容绘雁。
  • 非捕獲組
    (?:x)稱為非捕獲組(Non-capturing group),表示不返回該組匹配的內(nèi)容援所,即匹配的結(jié)果中不計(jì)入這個括號庐舟。
var m = 'abc'.match(/(?:.)b(.)/);
m // ["abc", "c"]
//第一個括號是非捕獲組,所以最后返回的結(jié)果中沒有第一個括號住拭,只有第二個括號匹配的內(nèi)容挪略。
  • 先行斷言
    x(?=y)稱為先行斷言(Positive look-ahead),x只有在y前面才匹配滔岳,y不會被計(jì)入返回結(jié)果杠娱。
var m = 'abc'.match(/b(?=c)/);
m // ["b"]
//括號里的部分是不會返回的。
  • 先行否定斷言
    x(?!y)稱為先行否定斷言(Negative look-ahead)澈蟆,x只有不在y前面才匹配墨辛,y不會被計(jì)入返回結(jié)果。

九趴俘、 JSON 格式

  • 一種用于數(shù)據(jù)交換的文本格式目的是取代繁瑣笨重的 XML 格式睹簇。
  • 每個 JSON 對象是簡單類型的值或復(fù)合類型的值例诀,只能是一個值衣厘,每個 JSON 文檔只能包含一個值。
  • JSON 對值的類型和格式的嚴(yán)格規(guī)定。
    • 復(fù)合類型的值只能是數(shù)組或?qū)ο蟛沂唬荒苁呛瘮?shù)俘种、正則表達(dá)式對象笼呆、日期對象挫鸽。
    • 簡單類型的值只有四種:字符串、數(shù)值(十進(jìn)制)埃脏、布爾值和null(不能用NaN, Infinity, -Infinity和undefined)搪锣。
    • 字符串必須使用雙引號表示,不能使用單引號彩掐。
    • 對象的鍵名必須放在雙引號里面构舟。
    • 數(shù)組或?qū)ο笞詈笠粋€成員的后面,不能加逗號堵幽。
  • JSON.stringify()用于將一個值轉(zhuǎn)為字符串狗超。該字符串符合 JSON 格式,并且可以被JSON.parse方法還原朴下。
    • 如果原始對象中努咐,有一個成員的值是undefined、函數(shù)或 XML 對象殴胧,這個成員會被過濾渗稍。
    • 正則對象會被轉(zhuǎn)成空對象。
JSON.stringify(/foo/) // "{}"
  • JSON.stringify會忽略對象的不可遍歷屬性溃肪。
    • JSON.stringify可接受一個數(shù)組作為第二個參數(shù)免胃,指定需要轉(zhuǎn)成字符串的屬性音五。第二個參數(shù)還可以是一個函數(shù)惫撰,用來更改JSON.stringify的默認(rèn)行為。
    • 遞歸處理中躺涝,每一次處理的對象都是前一次返回的值厨钻。
    • JSON.stringify還可接受第三個參數(shù),用于增加返回的JSON字符串的可讀性坚嗜。如果是數(shù)字夯膀,表示每個屬性前面添加的空格(最多不超過10個);如果是字符串(不超過10個字符)苍蔬,則該字符串會添加在每行前面诱建。
    • 如果對象有自定義的toJSON方法,那么JSON.stringify會使用這個方法的返回值作為參數(shù)碟绑,而忽略原對象的其他屬性俺猿。
  • toJSON將正則對象自動轉(zhuǎn)為字符串茎匠。JSON.stringify默認(rèn)不能轉(zhuǎn)換正則對象,設(shè)置了toJSON方法以后押袍,就可以轉(zhuǎn)換正則對象了诵冒。
  • JSON.parse()方法用于將JSON字符串轉(zhuǎn)化成對象。
    • 要求有效格式
    • 為了處理解析錯誤谊惭,可以放在try...catch代碼塊中汽馋。
    • JSON.parse方法可以接受一個處理函數(shù),與JSON.stringify方法類似圈盔。

十豹芯、console

Console面板(又稱為控制臺)

  • 用途:
    • 調(diào)試程序,顯示網(wǎng)頁代碼運(yùn)行時的錯誤信息驱敲。
    • 提供了一個命令行接口告组,用來與網(wǎng)頁代碼互動
  • 瀏覽器實(shí)現(xiàn)
    • Elements:查看網(wǎng)頁的HTML源碼和CSS代碼。
    • Resources:查看網(wǎng)頁加載的各種資源文件(比如代碼文件癌佩、字體文件木缝、css文件等),以及在硬盤上創(chuàng)建的各種內(nèi)容(比如本地緩存围辙、Cookie我碟、Local Storage等)。
    • Network:查看網(wǎng)頁的 HTTP 通信情況姚建。
    • Sources:查看網(wǎng)頁加載的所有源碼矫俺。
    • Timeline:查看各種網(wǎng)頁行為隨時間變化的情況。
    • Performance:查看網(wǎng)頁的性能情況掸冤,比如 CPU 和內(nèi)存消耗厘托。
    • Console:用來運(yùn)行 JavaScript 命令。
  • console 對象的方法
  • 1.console.log()
    • 在控制臺輸出信息稿湿∏ζィ可接受多個參數(shù),將結(jié)果連接起來輸出饺藤。
    • 自動在每次輸出的結(jié)尾包斑,添加換行符。
    • 如果第一個參數(shù)是格式字符串(使用了格式占位符)涕俗,將依次用后面的參數(shù)替換占位符再輸出罗丰。
  • console.log方法支持以下占位符,不同格式的數(shù)據(jù)必須使用對應(yīng)格式的占位符再姑。
    • %s 字符串
    • %d 整數(shù)
    • %i 整數(shù)
    • %f 浮點(diǎn)數(shù)
    • %o 對象的鏈接
    • %c CSS格式字符串
  • console.info()
  • console.debug()
    • 都是console.log方法的別名萌抵,用法完全一樣。console.info方法會在輸出信息的前面有藍(lán)色圖標(biāo)。
  • console.warn()黃色三角绍填,console.error()紅色的叉
    • 在控制臺輸出信息萎坷,表示出錯,會顯示錯誤發(fā)生的堆棧沐兰。其他與log都一樣哆档。
    • log方法是寫入標(biāo)準(zhǔn)輸出(stdout),warn方法和error方法是寫入標(biāo)準(zhǔn)錯誤(stderr)住闯。
  • console.table方法可以將某些復(fù)合類型的數(shù)據(jù)瓜浸,轉(zhuǎn)為表格顯示。
    • 復(fù)合型數(shù)據(jù)轉(zhuǎn)為表格顯示的條件是比原,必須擁有主鍵插佛。數(shù)組->數(shù)字鍵、對象->最外層鍵量窘。
  • console.count()用于計(jì)數(shù)雇寇,輸出它被調(diào)用了多少次。
  • console.dir()用來對一個對象進(jìn)行檢查(inspect)蚌铜,并以易于閱讀和打印的格式顯示锨侯。
 console.log({f1: 'foo', f2: 'bar'})
// Object {f1: "foo", f2: "bar"}

console.dir({f1: 'foo', f2: 'bar'})
// Object
//   f1: "foo"
//   f2: "bar"
//   __proto__: Object
//顯示dir方法的輸出結(jié)果,比log方法更易讀冬殃,信息也更豐富囚痴。
//該方法對于輸出 DOM 對象非常有用,因?yàn)闀@示 DOM 對象的所有屬性审葬。
  • console.dirxml()主要用于以目錄樹的形式深滚,顯示 DOM 節(jié)點(diǎn)。
console.dirxml([1, 2, 3])
// 等同于
console.dir([1, 2, 3])
//-如果參數(shù)不是 DOM 節(jié)點(diǎn)涣觉,而是普通的 JavaScript 對象痴荐,console.dirxml等同于console.dir。
  • console.assert(表達(dá)式官册,字符串)
    • 在程序運(yùn)行過程中進(jìn)行條件判斷生兆,若不滿足條件,顯示一個錯誤攀隔,但不會中斷程序執(zhí)行皂贩。相當(dāng)于提示用戶栖榨,內(nèi)部狀態(tài)不正確昆汹。
    • 只有當(dāng)?shù)谝粋€參數(shù)為false,才會提示有錯誤婴栽,在控制臺輸出第二個參數(shù)满粗,否則不會有任何結(jié)果。
console.assert(false, '判斷條件不成立')
// Assertion failed: 判斷條件不成立

// 相當(dāng)于
try {
  if (false) {
    throw new Error('判斷條件不成立');
  }
} catch(e) {
  console.error(e);
}
  • console.time()愚争,console.timeEnd()
    這兩個方法用于計(jì)時映皆,可以算出一個操作所花費(fèi)的準(zhǔn)確時間挤聘。
    • time方法表示計(jì)時開始,timeEnd方法表示計(jì)時結(jié)束捅彻。它們的參數(shù)是計(jì)時器的名稱组去。調(diào)用timeEnd方法之后,console窗口會顯示“計(jì)時器名稱: 所耗費(fèi)的時間”步淹。
  • console.profile()从隆,console.profileEnd()
    • console.profile方法用來新建一個性能測試器(profile),它的參數(shù)是性能測試器的名字缭裆。
    • console.profileEnd方法用來結(jié)束正在運(yùn)行的性能測試器键闺。
  • console.group(),console.groupend()澈驼,console.groupCollapsed()
    • console.group和console.groupend這兩個方法用于將顯示的信息分組辛燥。它只在輸出大量信息時有用,分在一組的信息缝其,可以用鼠標(biāo)折疊/展開挎塌。
    • console.groupCollapsed方法與console.group方法相似,區(qū)別是該組的內(nèi)容在第一次顯示時是收起的(collapsed)内边。
  • console.trace()勃蜘,console.clear()
    • console.trace方法顯示當(dāng)前執(zhí)行的代碼在堆棧中的調(diào)用路徑。
    • console.clear方法用于清除當(dāng)前控制臺的所有輸出假残,將光標(biāo)回置到第一行缭贡。如果用戶選中了控制臺的“Preserve log”選項(xiàng),網(wǎng)頁腳本調(diào)用console.log將不起作用辉懒,但手動在控制臺執(zhí)行該方法依然有效阳惹。
  • 命令行 API
    • $_屬性返回上一個表達(dá)式的值。
    • $0 - $4眶俩,控制臺保存了最近5個在Elements面板選中的DOM元素莹汤,$0代表倒數(shù)第一個,$1代表倒數(shù)第二個,直到$4。
    • $(selector)返回第一個匹配的元素,等同于document.querySelector()。如果頁面腳本對$有定義舆瘪,則會覆蓋原始的定義。
    • $$(selector)返回一個選中的DOM對象某残,等同于document.querySelectorAll澳厢。
    • $x(path)返回一個數(shù)組徐伐,包含匹配特定XPath表達(dá)式的所有DOM元素勺三。
    • inspect(object)打開相關(guān)面板,并選中相應(yīng)的元素:DOM元素在Elements面板中顯示逃顶,JavaScript對象在Profiles面板中顯示盈蛮。
    • getEventListeners(object)返回一個對象旁理,該對象的成員為登記了回調(diào)函數(shù)的各種事件,每個事件對應(yīng)一個數(shù)組烹植,數(shù)組的成員為該事件的回調(diào)函數(shù)愕贡。
    • keys(object)草雕,values(object)
      keys(object)方法返回一個數(shù)組,包含特定對象的所有鍵名固以。
      values(object)方法返回一個數(shù)組墩虹,包含特定對象的所有鍵值嘱巾。
    • monitorEvents(object[, events]) 監(jiān)聽特定對象上發(fā)生的特定事件。當(dāng)這種情況發(fā)生時诫钓,會返回一個Event對象旬昭,包含該事件的相關(guān)信息。
    • unmonitorEvents(object[, events])用于停止監(jiān)聽菌湃。
      允許監(jiān)聽同一大類的事件问拘。所有事件可以分成四個大類:
      • mouse:”mousedown”, “mouseup”, “click”, “dblclick”, “mousemove”, “mouseover”, “mouseout”, “mousewheel”
      • key:”keydown”, “keyup”, “keypress”, “textInput”
      • touch:”touchstart”, “touchmove”, “touchend”, “touchcancel”
      • control:”resize”, “scroll”, “zoom”, “focus”, “blur”, “select”, “change”, “submit”, “reset”
  • profile([name]),profileEnd()
    profile方法用于啟動一個特定名稱的CPU性能測試惧所,profileEnd方法用于結(jié)束該性能測試骤坐。
  • clear():清除控制臺的歷史。
    copy(object):復(fù)制特定DOM元素到剪貼板下愈。
    dir(object):顯示特定對象的所有屬性纽绍,是console.dir方法的別名。
    dirxml(object):顯示特定對象的XML形式势似,是console.dirxml方法的別名拌夏。
  • debugger用于除錯,設(shè)置斷點(diǎn)叫编。如果有正在運(yùn)行的除錯工具辖佣,程序運(yùn)行到debugger語句時會自動停下。沒有除錯工具搓逾,debugger語句不會產(chǎn)生任何結(jié)果卷谈,自動跳過這一句。

十一霞篡、屬性描述對象

  • 一個內(nèi)部數(shù)據(jù)結(jié)構(gòu)世蔗,用來描述一個對象的屬性的行為,控制它的行為朗兵。每個屬性都有自己對應(yīng)的屬性描述對象污淋,保存該屬性的一些元信息。
  • 6個元屬性余掖。
    • value該屬性的屬性值寸爆,默認(rèn)為undefined。
    • writable存放一個布爾值盐欺,表示屬性值(value)是否可改變赁豆,默認(rèn)為true。
    • enumerable(可枚舉性)存放一個布爾值冗美,默認(rèn)為true魔种。如果設(shè)為false,會使得某些操作(比如for...in循環(huán)粉洼、Object.keys())跳過該屬性节预。
    • configurable(可配置性)存放一個布爾值叶摄,默認(rèn)為true。false時將阻止某些操作改寫該屬性安拟。
    • get(getter)蛤吓,默認(rèn)undefined。
    • set(setter)去扣,默認(rèn)undefined柱衔。
  • Object.getOwnPropertyDescriptor方法可以讀出對象自身屬性的屬性描述對象樊破。
var o = { p: 'a' };

Object.getOwnPropertyDescriptor(o, 'p')
// Object { value: "a",
//   writable: true,
//   enumerable: true,
//   configurable: true
// }
  • Object.defineProperty()愉棱,Object.defineProperties()
    允許通過定義屬性描述對象,來定義或修改一個屬性哲戚,然后返回修改后的對象奔滑。格式:Object.defineProperty(object, propertyName, attributesObject),它的writable顺少、configurable朋其、enumerable這三個屬性的默認(rèn)值都為false。
  • 可枚舉性(enumerable)
    用來控制所描述的屬性脆炎,是否將被包括在for...in循環(huán)之中梅猿。如果為false
    • for..in(包括繼承自原型對象的屬性)
    • Object.keys(只返回對象本身的屬性)
    • JSON.stringify方法不會取到該屬性。
      只有可枚舉的屬性秒裕,才會被for...in循環(huán)遍歷袱蚓,同時還規(guī)定原生繼承的屬性都是不可枚舉的。
    • 如果需要獲取對象自身的所有屬性几蜻,不管是否可枚舉喇潘,可以使用Object.getOwnPropertyNames方法
  • 可配置性(configurable)
    決定了是否可以修改屬性描述對象。也就是說梭稚,當(dāng)configurable為false的時候颖低,value、writable弧烤、enumerable和configurable都不能被修改了忱屑。
    • writable只有在從false改為true會報錯,從true改為false則是允許的暇昂。
    • value莺戒,只要writable和configurable有一個為true,就允許改動话浇。
    • configurable為false時脏毯,若直接對該屬性賦值,不報錯但不會成功幔崖。
    • 可配置性決定了一個變量是否可以被刪除(delete)食店。
    • var聲明變量時其configurable為false渣淤。否則(或者使用屬性賦值的方式聲明變量),變量的可配置性為true吉嫩。
    • 如果一個變量是使用var命令生成的价认,就無法用delete命令刪除。也就是說自娩,delete只能刪除對象的屬性用踩。
  • 可寫性(writable)
    決定了屬性的值(value)是否可以被改變
  • Object.getOwnPropertyNames
    返回直接定義在某個對象上面的全部屬性的名稱,而不管該屬性是否可枚舉忙迁。
    • 一般系統(tǒng)原生的屬性(非用戶自定義的屬性)都是不可枚舉的脐彩。
  • Object.prototype.propertyIsEnumerable()用來判斷一個屬性是否可枚舉。
var o = {};
o.p = 123;

o.propertyIsEnumerable('p') // true
o.propertyIsEnumerable('toString') // false
//用戶自定義的p屬性是可枚舉的姊扔,而繼承自原型對象的toString屬性是不可枚舉的惠奸。
  • 存取器(accessor)
    • 除了直接定義,屬性還可以用存取器定義恰梢。get 和set佛南。
    • 存取器提供的是虛擬屬性(實(shí)際不存在),是每次讀取時計(jì)算生成的嵌言⌒峄兀可實(shí)現(xiàn)每個屬性禁止賦值等。
    • 存取器也可通過Object.defineProperty摧茴、Object.create定義绵载。
    • 可以實(shí)現(xiàn)數(shù)據(jù)對象與DOM對象的雙向綁定。
  • 對象的拷貝蓬蝶,可以通過Object.defineProperty方法來拷貝屬性尘分。
  • 控制對象狀態(tài)
    JavaScript提供了三種方法,精確控制一個對象的讀寫狀態(tài)丸氛,防止對象被改變培愁。最弱一層的保護(hù)是Object.preventExtensions,其次是Object.seal缓窜,最強(qiáng)的Object.freeze定续。
    • Object.preventExtensions方法可以使得一個對象無法再添加新的屬性。(可以用delete命令刪除它的現(xiàn)有屬性禾锤。)
    • Object.isExtensible方法用于檢查一個對象是否使用了Object.preventExtensions方法私股。也就是說,檢查是否可以為一個對象添加屬性恩掷。
    • Object.seal方法使得一個對象既無法添加新屬性倡鲸,也無法刪除舊屬性。
    • Object.isSealed方法用于檢查一個對象是否使用了Object.seal方法黄娘。
    • Object.freeze()可以使得一個對象無法添加新屬性峭状、無法刪除舊屬性克滴、也無法改變屬性的值,使得這個對象實(shí)際上變成了常量优床。
    • Object.isFrozen方法用于檢查一個對象是否使用了Object.freeze()方法劝赔。
    • 局限性
      上面的方法鎖定對象的可寫性有一個漏洞,依然可以通過改變原型對象胆敞,來為對象增加屬性着帽。可把原型也凍結(jié)住解決移层。
      另外一個局限是仍翰,如果屬性值是對象,上面這些方法只能凍結(jié)屬性指向的對象幽钢,而不能凍結(jié)對象本身的內(nèi)容歉备。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末傅是,一起剝皮案震驚了整個濱河市匪燕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌喧笔,老刑警劉巖帽驯,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異书闸,居然都是意外死亡尼变,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門浆劲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嫌术,“玉大人,你說我怎么就攤上這事牌借《绕” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵膨报,是天一觀的道長磷籍。 經(jīng)常有香客問我,道長现柠,這世上最難降的妖魔是什么院领? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮够吩,結(jié)果婚禮上比然,老公的妹妹穿的比我還像新娘。我一直安慰自己周循,他們只是感情好强法,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布扒寄。 她就那樣靜靜地躺著,像睡著了一般拟烫。 火紅的嫁衣襯著肌膚如雪该编。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天硕淑,我揣著相機(jī)與錄音课竣,去河邊找鬼。 笑死置媳,一個胖子當(dāng)著我的面吹牛于樟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拇囊,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼迂曲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了寥袭?” 一聲冷哼從身側(cè)響起路捧,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎传黄,沒想到半個月后杰扫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡膘掰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年章姓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片识埋。...
    茶點(diǎn)故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡凡伊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出窒舟,到底是詐尸還是另有隱情系忙,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布辜纲,位于F島的核電站笨觅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏耕腾。R本人自食惡果不足惜见剩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扫俺。 院中可真熱鬧苍苞,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至冈欢,卻和暖如春歉铝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凑耻。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工太示, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人香浩。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓类缤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親邻吭。 傳聞我的和親對象是個殘疾皇子餐弱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容