Javascript基礎鞏固系列——標準庫包裝對象(Boolean對象+Number對象+String對象)

全手打原創,轉載請標明出處:https://www.cnblogs.com/dreamsqin/p/13723822.html, 多謝,=。=~(如果對你有幫助的話請幫我點個贊啦)

重新學習JavaScript是因爲當年轉前端有點兒趕鴨子上架的意味,我一直在反思我的知識點總是很零散,不能在腦海中形成一個完整的體系,所以這次想通過再次學習將知識點都串聯起來,結合日常開發的項目,達到溫故而知新的效果。與此同時,總結一下我認爲很重要但又被我遺漏的知識點~

包裝對象

三種原始類型的值(數值、字符串、布爾值)通過構造函數NumberStringBoolean可以轉爲對象,也就是原始類型的“包裝對象”(wrapper),包裝對象僅只讀,不可修改。

公共實例方法

  • valueOf()
    返回包裝對象實例對應的原始類型的值。
new Number(123).valueOf()  // 123
new String('abc').valueOf() // "abc"
new Boolean(true).valueOf() // true
  • toString()
    返回對應的字符串形式。
new Number(123).toString() // "123"
new String('abc').toString() // "abc"
new Boolean(true).toString() // "true"

自定義實例方法

在原型對象上添加方法實現包裝對象的方法自定義,供原始類型的值直接調用。

String.prototype.double = function () {
  return this.valueOf() + this.valueOf();
};

'abc'.double()
// abcabc

自動轉換

某些場合,原始類型的值會自動當作包裝對象調用,即調用包裝對象的屬性和方法。這時,JavaScript 引擎會自動將原始類型的值轉爲包裝對象實例,並在使用後立刻銷燬實例。

'abc'.length // 3

// 等同於
var objStr = new String('abc')
// String {
//   0: "a", 1: "b", 2: "c", length: 3, [[PrimitiveValue]]: "abc"
// }
objStr.length // 3

Boolean對象

作爲構造函數,它主要用於生成布爾值的包裝對象實例,直接使用可以將任意值轉爲布爾值,使用雙重的否運算符(!!)也可以將任意值轉爲對應的布爾值。。

var b = new Boolean(true);
typeof b // "object"
b.valueOf() // true

Boolean(NaN) // false

!![] // true

Number對象

  • 作爲構造函數時,它用於生成值爲數值的對象,直接使用可以將任意值轉爲數值。
var n = new Number(1);
typeof n // "object"

Number(true) // 1

靜態屬性(即直接定義在Number對象上的屬性,而不是定義在實例上的屬性)。

  • Number.POSITIVE_INFINITY:正的無限,指向Infinity
  • Number.NEGATIVE_INFINITY:負的無限,指向-Infinity
  • Number.NaN:表示非數值,指向NaN
  • Number.MAX_VALUE: 表示最大的正數(在64位浮點數體系中爲1.7976931348623157e+308)。
  • Number.MIN_VALUE:表示最小的正數(即最接近0的正數,在64位浮點數體系中爲5e-324),相應的,最接近0的負數爲-Number.MIN_VALUE
  • Number.MAX_SAFE_INTEGER:表示能夠精確表示的最大整數,即9007199254740991。
  • Number.MIN_SAFE_INTEGER:表示能夠精確表示的最小整數,即-9007199254740991。

實例方法

  • Number.prototype.toString()
    將一個數值轉爲字符串形式,接受一個參數表示轉換的進制,默認十進制。
10.5.toString() // "10.5"
(10).toString(2) // "1010"
(10).toString(8) // "12"
(10).toString(16) // "a"
  • Number.prototype.toFixed()
    先將一個數轉爲指定位數(有效範圍0到100)的小數,然後返回這個小數對應的字符串。
(10).toFixed(2) // "10.00"
10.005.toFixed(2) // "10.01"

// 由於浮點數的原因小數的四捨五入是不定的
(10.055).toFixed(2) // 10.05
(10.005).toFixed(2) // 10.01
  • Number.prototype.toExponential()
    將一個數轉爲科學計數法形式,參數是小數點後有效數字的位數,範圍爲0到100。
(1234).toExponential()  // "1.234e+3"
(1234).toExponential(1) // "1.2e+3"
(1234).toExponential(2) // "1.23e+3"
  • Number.prototype.toPrecision()
    將一個數轉爲指定位數的有效數字,參數爲有效數字的位數,範圍是1到100,用於四捨五入時不太可靠,跟浮點數不是精確儲存有關。
(12.35).toPrecision(3) // "12.3"
(12.25).toPrecision(3) // "12.3"
(12.15).toPrecision(3) // "12.2"
(12.45).toPrecision(3) // "12.4"
  • Number.prototype.toLocaleString()
    接受一個地區碼作爲參數,返回一個字符串,表示當前數字在該地區的當地書寫形式,第二個參數用來定製指定用途的返回字符串。
(123).toLocaleString('zh-Hans-CN-u-nu-hanidec')
// "一二三"

(123).toLocaleString('zh-Hans-CN', { style: 'percent' })
// "12,300%"

(123).toLocaleString('zh-Hans-CN', { style: 'currency', currency: 'CNY' })
// "¥123.00"

(123).toLocaleString('de-DE', { style: 'currency', currency: 'EUR' })
// "123,00 €"

(123).toLocaleString('en-US', { style: 'currency', currency: 'USD' })
// "$123.00"

String對象

作爲構造函數時,它用於生成值爲字符串的對象,直接使用可以將任意值轉爲字符串。

var s = new String('abc');
typeof s // "object"
s.valueOf() // "abc"

String(true) // "true"

靜態方法

  • String.fromCharCode()
    參數是一個或多個數值,代表 Unicode 碼點,返回值是這些碼點組成的字符串,不支持 Unicode 碼點大於0xFFFF(十進制65535)的字符,因爲碼點大於0xFFFF的字符佔用四個字節,而 JavaScript 默認支持兩個字節的字符。。
String.fromCharCode() // ""
String.fromCharCode(97) // "a"
String.fromCharCode(104, 101, 108, 108, 111) // "hello"

String.fromCharCode(0x20BB7) // 文檔會報錯,可自行打印查看
String.fromCharCode(0x20BB7) === String.fromCharCode(0x0BB7) // true
// 用拆分的方法解決
String.fromCharCode(0xD842, 0xDFB7) // 文檔會報錯,可自行打印查看

實例屬性

  • String.prototype.length
    返回字符串的長度。
'abc'.length // 3

實例方法

  • String.prototype.charAt()
    返回指定位置的字符。
var s = new String('abc');
s.charAt(1) // "b"

// 等同於
'abc'[1] // "b"
  • String.prototype.charCodeAt()
    返回字符串指定位置的 Unicode 碼點(十進制表示),無參數時返回首字母碼點,相當於String.fromCharCode()的逆操作。
'abc'.charCodeAt(1) // 98
'abc'.charCodeAt() // 97
  • String.prototype.concat()
    連接兩個字符串,返回一個新字符串,不改變原字符串。
var one = 1;
var two = 2;
var three = '3';

''.concat(one, two, three) // "123"
one + two + three // "33"
  • String.prototype.slice()
    用於從原字符串取出子字符串並返回,不改變原字符串,如果第一個參數大於第二個參數返回空字符串。
'JavaScript'.slice(0, 4) // "Java"
'JavaScript'.slice(2, 1) // ""
  • String.prototype.substring()
    用於從原字符串取出子字符串並返回,不改變原字符串,如果第一個參數大於第二個參數會自動更換兩個參數的位置,如果參數是負數會自動轉0,規則有點反直覺建議優先使用slice
'JavaScript'.substring(0, 4) // "Java"
'JavaScript'.substring(10, 4) // "Script"
'JavaScript'.substring(4, -3) // "Java"
  • String.prototype.substr()
    用於從原字符串取出子字符串並返回,不改變原字符串,但第二個參數是子字符串的長度,如果爲負數會自動轉0。
'JavaScript'.substr(4, 6) // "Script"
'JavaScript'.substr(4, -1) // ""
  • String.prototype.indexOf()String.prototype.lastIndexOf()
    用於確定一個字符串在另一個字符串中第一次和最後一次出現的位置,返回結果是匹配開始的位置。如果返回-1,就表示不匹配。第二個參數表示開始比較的位置,前者是從前往後,後者是從後往前。
'hello world'.indexOf('o', 6) // 7
'JavaScript'.indexOf('script') // -1
'hello world'.lastIndexOf('o', 6) // 4
  • String.prototype.trim()
    用於去除字符串兩端的空格、製表符(\t\v)、換行符(\n)和回車符(\r),返回一個新字符串,不改變原字符串。
'  hello world  '.trim() // "hello world"
'\r\nabc \t'.trim() // 'abc'
  • String.prototype.toLowerCase()String.prototype.toUpperCase()
    前者將一個字符串全部轉爲小寫,後者則是全部轉爲大寫,它們都返回一個新字符串,不改變原字符串。
'Hello World'.toLowerCase()
// "hello world"

'Hello World'.toUpperCase()
// "HELLO WORLD"
  • String.prototype.match()
    用於確定原字符串是否匹配某個子字符串,返回一個數組,成員爲匹配的第一個字符串。如果沒有找到匹配,則返回null
var matches = 'cat, bat, sat, fat'.match('at');
matches.index // 1 匹配字符串開始的位置
matches.input // "cat, bat, sat, fat" 原始字符串
  • String.prototype.search()String.prototype.replace()
    前者基本等同於match,但是返回值爲匹配的第一個位置,如果沒有找到匹配,則返回-1。後者用於替換匹配的子字符串,一般情況下只替換第一個匹配(除非使用帶有g修飾符的正則表達式)。
'cat, bat, sat, fat'.search('at') // 1
'aaa'.replace('a', 'b') // "baa"
  • String.prototype.split()
    按照給定規則分割字符串,返回一個由分割出來的子字符串組成的數組,第二個參數限定返回數組的最大成員數。
'a||c'.split('|') // ['a', '', 'c']
'a|b|c'.split('') // ["a", "|", "b", "|", "c"]
'a|b|c'.split() // ["a|b|c"]
'a|b|c'.split('|', 2) // ["a", "b"]
  • String.prototype.localeCompare()
    用於比較兩個字符串。它返回一個整數,如果小於0,表示第一個字符串小於第二個字符串;如果等於0,表示兩者相等;如果大於0,表示第一個字符串大於第二個字符串。第二個參數指定所使用的語言(默認是英語)
'B'.localeCompare('a') // 1

'ä'.localeCompare('z', 'de') // -1
'ä'.localeCompare('z', 'sv') // 1

參考資料

JavaScript 語言入門教程 :https://wangdoc.com/javascript/index.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章