JavaScript學(xué)習(4) - 變量、作用域和內(nèi)存問題

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ù)組模擬為棧

  1. Push() - 在末尾推入數(shù)據(jù)項驻啤,return入棧后的數(shù)組長度

  2. 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ù)組模擬為隊列

  1. Push()- 在隊列末尾推入數(shù)據(jù)項,return入隊列后的數(shù)組長度

  2. shift() - 從數(shù)組前端取得項贼涩,并將數(shù)組長度減1(移除該數(shù)據(jù))

用unshift和pop方法將數(shù)組模擬為隊列:

  1. Unshift() - 在數(shù)組前端添加任意個數(shù)據(jù)項巧涧,并返回新數(shù)組長度
  2. 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í)行操作
})
  1. forEach 和 map 的區(qū)別:

  2. forEach沒有返回值,map會返回新數(shù)組

  3. forEach可以修改原數(shù)組

  4. forEach執(zhí)行速度 < map執(zhí)行速度

  1. every和 some 的區(qū)別:

  2. every是每一項執(zhí)行返回都為true私痹,整體才能返回true

  3. 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 - 表名正則表達式行為:

  1. g - 全局模式,應(yīng)用于所有字符串
  2. i - 不區(qū)分大小寫
  3. 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ù)表達式:

  1. 函數(shù)聲明方法 - 解析器會率先讀取函數(shù)聲明,添加到執(zhí)行環(huán)境中暮屡,故調(diào)用時撤摸,代碼可寫在函數(shù)聲明之前
  2. 函數(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

    1. 每個function都包含兩個非繼承得到的方法:apply和call
    2. apply和call的用途:在特定作用域中調(diào)用函數(shù)掘猿,設(shè)置函數(shù)體內(nèi)this對象的值
    3. apply和call的區(qū)別:傳參方式不一,主要是第二個參數(shù)傳入內(nèi)容不同
    4. 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ū)別:對象的生存期

  1. 用new創(chuàng)建的引用類型對象,在執(zhí)行流離開當前作用域之前一直都保存在內(nèi)存中懒叛,可在運行時添加屬性和方法
  2. 自動創(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類型的實例重寫了以下幾個方法:

    1. valueOf() - 返回基本類型值true/false

    2. toString() - 返回字符串‘true'/'false'

    基本類型與引用類型的布爾值的區(qū)別:

    1. typeof操作符對基本類型返回'boolean',對引用類型返回'object'
    2. 由于Boolean對象是Boolean類型的實例诅迷,所以使用instanceof的時候佩番,對象返回true,基本類型返回false
  • Number類型 - 不建議直接實例化使用(new方法)

    Number類型重寫以下幾個方法:

    1. valueOf() - 返回對象表示的基本類型的數(shù)值
    2. toString() - 返回字符串形式的數(shù)值

    基本類型與引用類型的Number值的區(qū)別:

    1. typeof操作符對基本類型返回'number'罢杉,對引用類型返回'object'
    2. 由于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對象

      1. 常見方法:isNaN()响迂、isFinite()parseInt()细疚、parseFloat()

      2. 其他方法:

        • encodeURI() - 對整個URI進行編碼蔗彤,一邊發(fā)送給瀏覽器,用特殊的UTF-8編碼替換所有無效的字符疯兼,從而讓瀏覽器可以接受和理解然遏;但不會對本身屬于URI的特殊字符進行編碼
        • encodeURIComponent() - 對URL種某一段進行編碼,對其發(fā)現(xiàn)的任何非標準字符進行編碼
        • decodeURI()
        • deCodeURLComponent()
      3. 特別方法:eval()

        // 下面語句等同于: alert('hi')
        eval("alert('hi')")
        
        • eval將傳入?yún)?shù)進行解析吧彪,解析為代碼塊后執(zhí)行
        • eval中創(chuàng)建的任何變量或函數(shù)都不會被提升作用域待侵,外部無法訪問到eval內(nèi)部創(chuàng)建的任何變量或函數(shù)
        • 嚴格模式下,為eval賦值也會導(dǎo)致錯誤
      4. Global對象屬性:

        Undefined, Nan, Infinity, Object, Array, Function, Boolean, String, Number, Date, RegExp, Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError

        • ECMASctipt 5 明確禁止給undefined姨裸、NaN和Infinity賦值
      5. window對象

        WEB瀏覽器將全局對象作為window對象的一部分加以實現(xiàn)秧倾;

        在全局作用域中聲明的所有變量和函數(shù),都是window對象的屬性

  • Math對象 - 輔助完成計算

    1. 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的平方根
    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 - 最小值
      
    3. 舍入方法 - 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
      
    4. random()方法 - 獲得返回大于0小于1的隨機數(shù)


Github: https://github.com/SHENLing0628/JavaScriptStudy
歡迎star扑毡,轉(zhuǎn)載請標注來源

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市盛险,隨后出現(xiàn)的幾起案子瞄摊,更是在濱河造成了極大的恐慌,老刑警劉巖苦掘,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件换帜,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹤啡,警方通過查閱死者的電腦和手機惯驼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人祟牲,你說我怎么就攤上這事隙畜。” “怎么了说贝?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵议惰,是天一觀的道長。 經(jīng)常有香客問我乡恕,道長言询,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任傲宜,我火速辦了婚禮运杭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘函卒。我一直安慰自己辆憔,他們只是感情好,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布谆趾。 她就那樣靜靜地躺著躁愿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沪蓬。 梳的紋絲不亂的頭發(fā)上彤钟,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天,我揣著相機與錄音跷叉,去河邊找鬼逸雹。 笑死,一個胖子當著我的面吹牛云挟,可吹牛的內(nèi)容都是我干的梆砸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼园欣,長吁一口氣:“原來是場噩夢啊……” “哼帖世!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起沸枯,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤日矫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后绑榴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哪轿,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年翔怎,在試婚紗的時候發(fā)現(xiàn)自己被綠了窃诉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杨耙。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖飘痛,靈堂內(nèi)的尸體忽然破棺而出珊膜,到底是詐尸還是另有隱情,我是刑警寧澤敦冬,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布辅搬,位于F島的核電站,受9級特大地震影響脖旱,放射性物質(zhì)發(fā)生泄漏堪遂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一萌庆、第九天 我趴在偏房一處隱蔽的房頂上張望溶褪。 院中可真熱鬧,春花似錦践险、人聲如沸猿妈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽彭则。三九已至,卻和暖如春占遥,著一層夾襖步出監(jiān)牢的瞬間俯抖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工瓦胎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留芬萍,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓搔啊,卻偏偏與公主長得像柬祠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子负芋,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

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