Github: https://github.com/SHENLing0628/JavaScriptStudy
歡迎star作谭,轉(zhuǎn)載請標注來源
1. Object類型
1.1 創(chuàng)建方法
// 1. new一個Object對象频丘,使用Object構(gòu)造函數(shù)
var person = new Object()
person.name = "Cindy"
person.age = 27
// 2. 對象字面量法 - 用JSON對象的方式直接創(chuàng)建
var person = {
name: "Cindy",
age: 27
}
// 對象字面量法補充
var person = {} // 和 new Object() 相同
1.2 對象訪問方法
person.name // 輸出:Cindy
person["name"] // 輸出:Cindy
// 方括號傳入string的方法便于傳入變量,動態(tài)獲取對象中不同值
2. Array類型
ECMAScript的Array特點:每個位置都可以存入不同類型的數(shù)據(jù)稿械,例如第一個位置是string膜廊,第二個是Object
2.1 創(chuàng)建方法
// 1. new一個Array對象乏沸,使用Array構(gòu)造函數(shù)
var colors = new Array()
var colors = new Array(20)
var colors = new Array('red', 'blue', 'yellow')
var colors = Array("Gray") // 可以不用new
// 2. 數(shù)組字面量法
var colors = []
var colors = ['red', 'blue', 'yellow']
2.2 對象訪問方法
// Array對象包含length屬性
alert(colors.length) // 3
// Array對象可用下角標引用
colors[0] = "gray"
alert(colors[0]) // 輸出:“gray”
2.3 檢測數(shù)組 Array.isArray()
// 1. instanceof
alert(color instanceof Array) // true
// 2. Array.isArray()
alert(Array.isArray(colors)) // true
// 備注:instanceof的問題:假定僅存在一個全局執(zhí)行環(huán)境,當網(wǎng)頁存在多個框架時爪瓜,則有多個全局執(zhí)行環(huán)境屎蜓,instanceof就不對
2.4 轉(zhuǎn)換方法 - toLocaleString、toString钥勋、valueOf
// 每個對象都包含toLocaleString()、toString()辆苔、valueOf()方法
// toString() - 返回數(shù)組中每個字符串拼接而成的算灸,以逗號分隔的字符串
// valueOf() - 返回數(shù)組本身
var colors = ['red', 'blue', 'yellow']
alert(colors.toString()) // red, blue, yellow
alert(colors.valueOf()) // red, blue, yellow
alert(colors) // red, blue, yellow
2.5 棧方法 - push、pop
用push和pop方法把數(shù)組模擬為棧
Push() - 在末尾推入數(shù)據(jù)項驻啤,return入棧后的數(shù)組長度
pop() - 獲取當前棧的最后一項菲驴,并從棧中推出這一項
注意:兩個方法作用的位置都是棧的頂部,也就是數(shù)組的最后一個位置
var colors = []
// 1. 推入兩項
var count = colors.push('red', 'blue')
alert(count) // 2
// 2. 再在末尾推入1項
count = colors.push('yellow')
alert(count) // 3
alert(colors) // red, blue, yellow
// 3. 獲得最后一項骑冗,并從棧中推出該項
var item = colors.pop()
alert(item) // yellow
alert(colors.length) // 2
2.6 隊列方法 - push赊瞬、shift
用push和shift方法把數(shù)組模擬為隊列
Push()- 在隊列末尾推入數(shù)據(jù)項,return入隊列后的數(shù)組長度
shift() - 從數(shù)組前端取得項贼涩,并將數(shù)組長度減1(移除該數(shù)據(jù))
用unshift和pop方法將數(shù)組模擬為隊列:
- Unshift() - 在數(shù)組前端添加任意個數(shù)據(jù)項巧涧,并返回新數(shù)組長度
- pop() - 獲取當前棧的最后一項,并從棧中推出這一項
var colors = []
// 1. 推入兩項
var count = colors.push('red', 'blue')
alert(count) // 2
// 2. 再在末尾推入1項
count = colors.push('yellow')
alert(count) // 3
alert(colors) // red, blue, yellow
// 3. 獲得隊列最前面的一項遥倦,并從隊列中推出該項
var item = colors.shift()
alert(item) // red
alert(colors.length) // 2
// 4. 在數(shù)組前端推入兩項
count = colors.unshift('yellow', 'gray')
alert(count) // 4
alert(colors) // yellow, gray, red, blue
// 5. 在數(shù)組最后推出一項
item = colors.pop()
alert(item) // green
alert(colors.length) // 3
2.7 重排序方法 - reverse谤绳、sort
// 1. reverse - 反轉(zhuǎn)數(shù)組順序
var values = [1, 2, 3, 4, 5]
values.reverse() // 5, 4, 3, 2, 1
// 2. sort - 按照字符串升序排序(即使數(shù)組內(nèi)為Number,也是按照字符串排序)
var values = [0, 1, 5, 10, 15]
values.sort() // 0袒哥, 1缩筛, 10, 15堡称, 5
// 2.1 按照升序排序 - 先寫一個compare方法瞎抛,然后調(diào)用
function compare(value1, value2) {
if (value1 < value2) return -1
else if (value1 > value2) return 1
else return 0
}
values.sort(compare) // 0, 1, 5, 10, 15
// 2.2 通過compare方法實現(xiàn)降序排序
function compare(value1, value2) {
if (value1 < value2) return 1
else if (value1 > value2) return -1
else return 0
}
values.sort(compare) // 15, 10, 5, 1, 0
// 2.3 數(shù)值類型比較的簡易升序compare方法
function compare(value1, value2) {
return value1 - value2
}
2.8 操作方法 - concat、slice却紧、splice
// 1. concat - 拼接數(shù)組
var colors = ['red', 'blue', 'yellow']
var colors2 = colors.concat('green', ['black', 'brown']) // red, blue, yellow, green, black, brown
// 2. slice - 截取部分數(shù)組
// 參數(shù)1:起始位置
// 參數(shù)2: 結(jié)束位置(如果不傳入該值桐臊,則默認結(jié)束為止為數(shù)組末尾)
// 注意:如果結(jié)束位置小于起始位置胎撤,則返回空數(shù)組
var colors = ['red', 'blue', 'yellow', 'green', 'black']
var colors2 = colors.slice(1) // red, yellow, green, black
var colors3 = colors.slice(1, 2) // blue, yellow
var colors4 = colors.slice(-4, -3) // 效果同slice(1, 2)相同
// 3. splice - 數(shù)組刪除、插入豪硅、替換
// 3.1 刪除:傳入兩個參數(shù):(刪除第一項位置, 要刪除的項數(shù))
var colors = ['red', 'blue', 'yellow', 'black']
var remove = colors.splice(0, 2)
alert(colors) // yellow, black - 刪除原數(shù)組:從第0個位置開始哩照,刪除2項
alert(remove) // red, blue - 被移除的數(shù)組
// 3.2 插入:傳入三個參數(shù):(插入起始位置, 0, 要插入的項)
var insert = colors.splice(1, 0, 'green', 'orange')
alert(colors) // yellow, green, orange, black - 插入原數(shù)組:從位置1開始,插入兩項
alert(insert) // [] - 返回空數(shù)組
// 3.3 替換:傳入三個參數(shù):(起始位置, 要刪除的項數(shù), 要插入的任意數(shù)量的項)
var replace = colors.splice(1, 1, 'red', 'purple') // 插入兩項懒浮,刪除一項
alert(colors) // yellow, red, purple, orange, black - 刪除與插入:在1的位置飘弧,刪除1項,插入2項
alert(replace) // red - 返回被刪除的一項
2.9 位置方法 - indexOf砚著、lastIndexOf
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1]
// 1. indexOf:從前往后查詢次伶,找到查詢值的位置,返回對應(yīng)index稽穆,反之返回-1
var result1 = numbers.indexOf(4) // 3
var result2 = numbers.indexOf(10) // -1
// 2. lastIndexOf:從后往前查詢冠王,找到查詢值的位置,返回對應(yīng)index舌镶,反之返回-1
var result3 = numbers.lastIndexOf(4) // 5
// 注意:兩者均可傳入兩個參數(shù):(要查找的數(shù)據(jù)項, 查找起始的索引值)
var result4 = numbers.indexOf(4, 4) // 5
2.10 迭代方法 - every柱彻、filter、forEach、map、some
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1]
// 1. every() - 對數(shù)組中每一項運行給定函數(shù)爱沟,如果該函數(shù)對每一項都返回true,則返回true
var everyResult = numbers.every(function(item, index, array) {
return item > 2
})
alert(everyResult) // false - 因為傳入的每一項不是都返回true卖擅,所以結(jié)果為false
// 2. some() - 對數(shù)組中每一項運行給定函數(shù),如果該函數(shù)某一項返回為true墨技,則整體返回true
var someResult = numbers.some(function(item, index, array) {
return item > 2
})
alert(someResult) // true - 傳入部分項返回為true惩阶,則最終結(jié)果為true
// 3. filter() - 對數(shù)組中每一項運行給定函數(shù),返回該函數(shù)會返回true的項組成的數(shù)組
var filterResult = numbers.filter(function(item, index, array) {
return item > 2
})
alert(filterResult) // [3, 4, 5, 4, 3]
// 4. map() - 對數(shù)組中每一項運行給定函數(shù)扣汪,返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組
var mapResult = numbers.map(function(item, index, array) {
return item * 2
})
alert(mapResult) // [2, 4, 6, 8, 10, 8, 6, 4, 2] - 返回每個數(shù)乘以2的結(jié)果組成的數(shù)組
// 5. forEach() - 對數(shù)組中每一項運行給定函數(shù)断楷,該方法無返回值
numbers.forEach(function(item, index, array) {
// 執(zhí)行操作
})
forEach 和 map 的區(qū)別:
forEach沒有返回值,map會返回新數(shù)組
forEach可以修改原數(shù)組
forEach執(zhí)行速度 < map執(zhí)行速度
every和 some 的區(qū)別:
every是每一項執(zhí)行返回都為true私痹,整體才能返回true
some是只要有一項返回為true脐嫂,整體就能返回true
2.11 歸并方法 - reduce、reduceRight
迭代一個數(shù)組中的所有項紊遵,最終得到一個返回值
reduce - 從數(shù)組第一項開始向后迭代
reduceRight - 從數(shù)組最后一項開始向前迭代
// 通過reduce對數(shù)組求和
var values = [1, 2, 3, 4, 5]
var sum = values.reduce(function (prev, cur, index, array) {
return prev + cur
})
alert(sum) //15
3. Date類型
推薦momentjs庫進行時間日期轉(zhuǎn)換
// 創(chuàng)建一個日期對象账千,自動獲取當前日期
var now = new Date()
// 接收日期表示字符串,轉(zhuǎn)換為相應(yīng)日期毫秒數(shù)
Date.parse("6/13/2008")
// 日期格式化
toDateString() // 以特定實現(xiàn)的格式顯示星期幾暗膜、月匀奏、日和年
toTimeString() // 以特定實現(xiàn)的格式顯示時、分学搜、秒和時區(qū)
toLocaleDateString() // 以特定于地區(qū)的格式顯示星期幾娃善、月论衍、日和年
toLocaleTimeString() // 以特定于地區(qū)的格式顯示時、分聚磺、秒
toUTCString() // 以特定實現(xiàn)的格式顯示UTC日期
4. RegExp類型
使用類似Perl語法坯台,創(chuàng)建正則表達式
var expression = / pattern / flag
flag - 表名正則表達式行為:
- g - 全局模式,應(yīng)用于所有字符串
- i - 不區(qū)分大小寫
- m - 多行模式瘫寝,到達一行文本末尾時還會繼續(xù)查找下一行中是否存在與模式匹配的項
5. Function類型
函數(shù)本身也是引用類型蜒蕾,可以用引用類型的構(gòu)造函數(shù)進行對象創(chuàng)建
// 1. 函數(shù)聲明 - 常規(guī)創(chuàng)建function方法
function sum (num1, num2) {
return num1 + num2
}
// 2. 函數(shù)表達式 - 用function構(gòu)造函數(shù)方式創(chuàng)建引用,效果同上方相同
var sum1 = function (num1, num2) {
return num1 + num2
}
// 備注1:指針引用
var sum2 = sum1 // sum1和sum2均指向同一個function內(nèi)容
// 備注2:用指針解釋function沒有重載
var add1 = function (num) { return num + 100 }
add1 = function(num) { return num + 200 } //創(chuàng)建第二個函數(shù)的時候焕阿,實際上覆蓋了第一個引用咪啡,故沒有重載
5.1 函數(shù)聲明和函數(shù)表達式
函數(shù)聲明與函數(shù)表達式:
- 函數(shù)聲明方法 - 解析器會率先讀取函數(shù)聲明,添加到執(zhí)行環(huán)境中暮屡,故調(diào)用時撤摸,代碼可寫在函數(shù)聲明之前
- 函數(shù)表達式法 - 解析器無法對函數(shù)聲明進行提升,率先添加到執(zhí)行環(huán)境褒纲,故調(diào)用時准夷,必須寫在表達式之后
/* 1. 函數(shù)聲明的調(diào)用
* 注:調(diào)用方法可寫在函數(shù)聲明前面,因為解析器已經(jīng)提前將該function添加到執(zhí)行環(huán)境中莺掠,隨時可以調(diào)用
*/
test(1, 2) // 3
function test (val1, val2) {
return val1 + val2
}
/* 2. 函數(shù)表達式的調(diào)用
* 注:此處的test2是一個引用類型變量冕象,通過var進行聲明,調(diào)用這個var需要放在初始化之后進行
*/
test2(1, 2) // error
var test2 = function (val1, val2) {
return val1 + val2
}
test2(1, 2) // 3 - 合法
5.2 將function作為值進行傳遞
因為function本身就是變量汁蝶,所以function也可以作為參數(shù)進行傳遞
// 1. 將function作為參數(shù)傳遞到另一個function中
function add1(num) {
return num + 1
}
function add2(num2) {
return num2 + 2
}
var result = add2(add1(10)) // 13
// 2. 從函數(shù)中返回一個函數(shù)
function createCompareFunction(propName) {
return function (obj1, obj2) {
var value1 = obj1[propName]
var value2 = obj2[propName]
if (value1 < value2) return -1
else if (value1 > value2) return 1
else return 0
}
}
var data = [
{ name: 'name1', age: 20 },
{ name: 'name2', age: 28 }
]
data.sort(createCompareFunction('age'))
5.3 函數(shù)內(nèi)部屬性 - this、arguments
// 1. arguments - 用callee屬性進行解耦調(diào)用
// example:階乘
function fac (num) {
if (num <= 1) return 1
else return num * arguments.callee(num - 1) // 新方法:消除緊密耦合問題论悴,使無論調(diào)用函數(shù)時寫什么名字都能正常完成遞歸調(diào)用
// else return num * fac(num - 1) // 常規(guī)方法:必須調(diào)用名稱同函數(shù)名稱一致
}
var trueFac = fac // trueFac獲得了fac的值掖棉,引用、指針
fac = function() { // 覆蓋原fac膀估,如果不使用callee方法幔亥,則會影響到trueFac內(nèi)部,變?yōu)閞eturn num * 0
return 0
}
alert(trueFac(5)) // 120
// 因為原fac中察纯,使用了callee帕棉,所以能返回正常的階乘數(shù)據(jù),
// 否則會因為對fac的覆蓋饼记,導(dǎo)致trueFac中return num * 0 = 0
alert(fac(5)) // 0
// 2. this - 函數(shù)執(zhí)行的環(huán)境對象
window.color = 'red'
var o = { color: 'blue' }
function sayColor () {
alert(this.color)
}
sayColor() // 'red' - 此處this指向全局環(huán)境對象window
o.sayColor = sayColor // o中創(chuàng)建屬性sayColor
o.sayColor() // 'blue' - o中的sayColor屬性調(diào)用的this香伴,指向的是對象o,故輸出blue
// 備注:sayColor依然是一個指針具则,無論是內(nèi)部還是外部指向的是同一個指針變量即纲,只是調(diào)用時的this對象是不同的
// 更為優(yōu)雅的調(diào)用方法:5.4節(jié)中的call()方法
5.4 函數(shù)屬性和方法 - length、prototype
- length屬性:希望接收的命名參數(shù)的個數(shù)(不是arguments的個數(shù))
function foo0 () {
return ''
}
function foo1 (num) {
return num
}
function foo2 (num1, num2) {
return num1 + num2
}
foo0.length // 0
foo1.length // 1
foo2.length // 2
-
prototype屬性
prototype保存引用類型所有實例方法博肋,包括toString()低斋、valueOf()等
prototype屬性不可枚舉蜂厅,故使用for-in無法發(fā)現(xiàn)
本處重點介紹三個方法:apply、call膊畴、bind
- 每個function都包含兩個非繼承得到的方法:apply和call
- apply和call的用途:在特定作用域中調(diào)用函數(shù)掘猿,設(shè)置函數(shù)體內(nèi)this對象的值
- apply和call的區(qū)別:傳參方式不一,主要是第二個參數(shù)傳入內(nèi)容不同
- bind的用途:創(chuàng)建對象的實例唇跨,將需要使用的對象的this綁定到function中
// 1. apply的第二個傳參是arguments對象或者數(shù)組
function sum(num1, num2) {
return num1+ num2
}
function callSum1 (num1, num2) {
return sum.apply(this, arguments)
}
function callSum2 (num1, num2) {
return sum.apply(this, [num1, num2])
}
callSum1(10, 20) // 30
callSum2(10, 20) // 30
// 2. call方法傳遞給函數(shù)的參數(shù)必須逐個列舉稠通,而不是傳入array
function callSum3 (num1, num2) {
return sum.call(this, num1, num2)
}
callSum3(10, 20) // 30
// 3. call和apply的應(yīng)用 - 擴大作用域 - 對象無需與方法產(chǎn)生耦合關(guān)系
window.color = 'red'
var o ={ color: 'blue' }
function sayColor() {
alert(this.color)
}
sayColor() // red - 直接調(diào)用:返回全局對象的this.color
sayColor.call(this) // red - 傳入全局對象this,返回this.color
sayColor.call(window) // red - 傳入全局對象window轻绞,返回window.color
sayColor.call(o) // blue - 傳入對象o采记,返回o.color
/*
* 普通方法:對象與方法之間產(chǎn)生了耦合關(guān)系,對sayColor的覆蓋重寫等改變都會造成影響
* o.sayColor = sayColor
* o.sayColor()
*/
// 4. bind方法 - 創(chuàng)建函數(shù)的實例
var objSayColor = sayColor.bind(o) // 讓objSayColor的this值就是o.this政勃,而非全局的this
objSayColor() // blue - 全局調(diào)用時唧龄,objSayColor獲取的是o.this
sayColor() // red - - 全局調(diào)用時,sayColor獲取的是window
// 5. valueOf() - 僅返回函數(shù)代碼
sayColor.valueOf()
/* 輸出結(jié)果:
* ? sayColor() {
* alert(this.color)
* }
*/
5.5 基本包裝類型 - Boolean奸远、Number既棺、String
基本類型值具備一些包裝好的方法供基本類型使用:var s2 = s1.substring(2)
引用類型與基本包裝類型的主要區(qū)別:對象的生存期
- 用new創(chuàng)建的引用類型對象,在執(zhí)行流離開當前作用域之前一直都保存在內(nèi)存中懒叛,可在運行時添加屬性和方法
- 自動創(chuàng)建的基本包裝類型對象丸冕,只存在于一行代碼的執(zhí)行瞬間,然后立即被銷毀薛窥,不可在運行時添加屬性和方法
// new調(diào)用構(gòu)造函數(shù)和直接使用同名的轉(zhuǎn)型函數(shù)不一樣
var value = '25'
var number = Number(value) // 轉(zhuǎn)型函數(shù)
alert(typeof number) // number
var obj = new Number(value) // 構(gòu)造函數(shù)
alert(typeof obj) // object
-
Boolean類型 - 建議不要使用實例化方法(new方法)胖烛,容易產(chǎn)生混淆
Boolean類型的實例重寫了以下幾個方法:
valueOf() - 返回基本類型值true/false
toString() - 返回字符串‘true'/'false'
基本類型與引用類型的布爾值的區(qū)別:
- typeof操作符對基本類型返回'boolean',對引用類型返回'object'
- 由于Boolean對象是Boolean類型的實例诅迷,所以使用instanceof的時候佩番,對象返回true,基本類型返回false
-
Number類型 - 不建議直接實例化使用(new方法)
Number類型重寫以下幾個方法:
- valueOf() - 返回對象表示的基本類型的數(shù)值
- toString() - 返回字符串形式的數(shù)值
基本類型與引用類型的Number值的區(qū)別:
- typeof操作符對基本類型返回'number'罢杉,對引用類型返回'object'
- 由于Number對象是Number類型的實例趟畏,所以使用instanceof的時候,對象返回true滩租,基本類型返回false
// Number類型提供的其他方法: var num1 = 10 var num2 = 10.005 // 1. toFixed - 按照指定的小數(shù)位返回數(shù)值的字符串表示赋秀,且四舍五入 num1.toFixed(2) // 10.00 num2.toFixed(2) // 10.01 // 2. toExponential - 指數(shù)表示法 num1.toExponential(1) // 1.0e+1 // 3. toPrecision - 按照何時的方法返回合適的數(shù)值格式 var num3 = 99 num3.toPrecision(1) // 1e+2 num3.toPrecision(2) // 99 num3.toPrevision(3) //99.0
-
String類型
// 1. 使用構(gòu)造函數(shù)創(chuàng)建 var strObj = new Sting('hello world') // 2. length() - 獲得字符串長度 var str = 'hello world' alert(str.length) // 11 // 3. 字符方法 // 3.1 charAt() - 以單字符串形式返回給定位置的那個字符 var strVal = 'hello world' alert(strVal.charAt(1)) // e // 3.2 charCodeAt - 以字符編碼形式返回給定位置的那個字符 alert(strVal.charCodeAt(1)) // 101 // 3.3 直接使用方括號[]訪問給定位置的字符(IE8以前版本不支持) alert(strVal[1]) // e // 4. 字符串操作方法 // 4.1 concat() - 將一個或多個字符串拼接起來,返回拼接得到的新字符串(注:用+號也有相同效果) var str1 = 'hello' var str2 = str1.concat(' world') // hello world var str3 = str1.concat(' world', '!') // hello world! var str4 = str1 + ' world' + '!' // hello world! // 4.2 slice() - 截取從起始位置到結(jié)束位置的字符串 var str5 = strVal.slice(3) // lo world - 若未指定結(jié)束位律想,則默認為最后一位 var str6 = strVal.slice(3, 7) // lo w - 指定結(jié)束位時猎莲,返回字符串不包含最后一位 // 4.3 substr() - 截取從起始位置到結(jié)束位置的字符串 var str7 = strVal.substr(3) // lo world - 若未指定結(jié)束位,則默認為最后一位 var str8 = strVal.substr(3, 7) // lo worl - 指定結(jié)束位時技即,返回字符串包含最后一位的下一位 // 4.4 substring() - 截取從起始位置到結(jié)束位置的字符串 var str9 = strVal.substring(3) // lo world - 若未指定結(jié)束位益眉,則默認為最后一位 var str10 = strVal.substring(3, 7) // lo w - 指定結(jié)束位時,返回字符串不包含最后一位 // 5. 字符串位置方法 var str11 = strVal.indexOf('o') // 4 - 從第一位開始往后查詢 var str12 = strVal.lastIndexOf('o') // 7 - 從最后一位開始往前查詢 var str12 = strVal.indexOf('o', 6) // 7 - 從第6位開始往后查詢 var str13 = strVal.lastIndexOf('o', 6) // 4 - 從第6位開始往前查詢 // 6. trim() - 刪除前后空格 var str14 = ' hello ' var str15 = str14.trim() // 'hello' // 7. 大小寫轉(zhuǎn)換 var str16 = strVal.toUpperCase() // HELLO WORLD var str17 = str16.toLowerCase() // hello world // 8. 字符串模式匹配方法 - match()/search()/replace() - 類似調(diào)用RegExp的exec()方法,用于匹配正則表達式或RegExp對象 var text = 'cat, bat, sat, fat' var pattern = /.at/ var matches = text.match(pattern) // 返回一個數(shù)組 alert(matches.index) // 0 alert(matches[0]) // 'cat' alert(pattern.lastIndex) // 0 var pos = text.search(/at/) // 1 - at在text中第一次出現(xiàn)的位置 var rep = text.replace('at', 'ond') // cond, bat, sat, fat - 替換字符串 var rep2 = text.replace(/at/g, 'ond') // cond, bond, sond, fond var sp = text.split(', ') // ['cat', 'bat', 'sat', 'fat'] - 按符號分割 // 9. localeCompare() - 比較兩個字符串 /* 比較規(guī)則: * a. 如果字符串在字母表中應(yīng)該排在字符串參數(shù)之前郭脂,則返回一個負數(shù)(-1) * b. 如果字符串等于字符串參數(shù)年碘,返回0 * c. 如如果字符串在字母表中應(yīng)該排在字符串參數(shù)之后,則返回一個正數(shù)(1) */ var stringValue = 'yellow' stringValue.localeCompare('bricke') // 1 stringValue.localeCompare('yellow') // 0 stringValue.localeCompare('zooooo') // -1 // 10. fromCharCode() - 接收一個或多個字符串編碼展鸡,并將他們轉(zhuǎn)換成字符串 String.fromCharCode(104, 101, 108, 108, 111) // hello
5.6 單體內(nèi)置對象
有ECMAScript提供的屿衅,不依賴于宿主環(huán)境 的對象。開發(fā)人員無需顯式的實例化內(nèi)置對象
例如:Object莹弊、Array涤久、String、Global忍弛、Math
下面強調(diào)介紹Global和Math對象
-
Global對象
常見方法:
isNaN()
响迂、isFinite()
、parseInt()
细疚、parseFloat()
等-
其他方法:
-
encodeURI()
- 對整個URI進行編碼蔗彤,一邊發(fā)送給瀏覽器,用特殊的UTF-8編碼替換所有無效的字符疯兼,從而讓瀏覽器可以接受和理解然遏;但不會對本身屬于URI的特殊字符進行編碼 -
encodeURIComponent()
- 對URL種某一段進行編碼,對其發(fā)現(xiàn)的任何非標準字符進行編碼 decodeURI()
deCodeURLComponent()
-
-
特別方法:
eval()
// 下面語句等同于: alert('hi') eval("alert('hi')")
- eval將傳入?yún)?shù)進行解析吧彪,解析為代碼塊后執(zhí)行
- eval中創(chuàng)建的任何變量或函數(shù)都不會被提升作用域待侵,外部無法訪問到eval內(nèi)部創(chuàng)建的任何變量或函數(shù)
- 嚴格模式下,為eval賦值也會導(dǎo)致錯誤
-
Global對象屬性:
Undefined, Nan, Infinity, Object, Array, Function, Boolean, String, Number, Date, RegExp, Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError
- ECMASctipt 5 明確禁止給undefined姨裸、NaN和Infinity賦值
-
window對象
WEB瀏覽器將全局對象作為window對象的一部分加以實現(xiàn)秧倾;
在全局作用域中聲明的所有變量和函數(shù),都是window對象的屬性
-
-
Math對象 - 輔助完成計算
-
Math對象的屬性
Math屬性 說明 Math.E 自然對數(shù)的底數(shù)傀缩,常量e的值 Math.LN10 10的自然對數(shù) Math.LN2 2的自然對數(shù) Math.LOG2E 以2為底的e的對數(shù) Math.LOG10E 以10為底的e的對數(shù) Math.PI π的值 Math.SORT1_2 1/2的平方根(2的平方根的倒數(shù)) Math.SORT2 2的平方根 -
min()
和max()
var values = [1, 2, 3, 4, 5, 6] var max = Math.max.apply(Math, values) // 6 - 最大值 var min = Math.min.apply(Math, values) // 1 - 最小值 // 另一種方法 max = Math.max(1, 2, 3, 4, 5, 6) // 6 - 最大值 min = Math.min(1, 2, 3, 4, 5, 6) // 1 - 最小值 // 另一種方法 - 解構(gòu)values max = Math.max(...values) // 6 - 最大值 min = Math.min(...values) // 1 - 最小值
-
舍入方法 -
ceil()
中狂、round()
、floor()
-
Math.ceil()
- 向上舍入:向上舍入為最接近的整數(shù) -
Math.round()
- 標準舍入:將數(shù)值四舍五入為最接近的整數(shù) -
Math.floor()
- 向下舍入:將數(shù)值向下舍入為最接近的整數(shù)
Math.ceil(25.9) // 26 Math.ceil(25.5) // 26 Math.ceil(25.1) // 26 Math.round(25.9) // 26 Math.round(25.5) // 26 Math.round(25.1) // 25 Math.floor(25.9) // 25 Math.floor(25.5) // 25 Math.floor(25.1) // 25
-
random()
方法 - 獲得返回大于0小于1的隨機數(shù)
-
Github: https://github.com/SHENLing0628/JavaScriptStudy
歡迎star扑毡,轉(zhuǎn)載請標注來源