真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JavaScript如何實現(xiàn)基礎(chǔ)類型、對象一樣有屬性和方法

這篇文章主要介紹“JavaScript如何實現(xiàn)基礎(chǔ)類型、對象一樣有屬性和方法”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“JavaScript如何實現(xiàn)基礎(chǔ)類型、對象一樣有屬性和方法”文章能幫助大家解決問題。

公司主營業(yè)務(wù):網(wǎng)站制作、做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出欒川免費做網(wǎng)站回饋大家。

JavaScript如何實現(xiàn)基礎(chǔ)類型、對象一樣有屬性和方法

基礎(chǔ)類型的“屬性方法”

前言

在其他面向?qū)ο蟮木幊陶Z言中,例如JavaC++,屬性是對象的獨有概念,基礎(chǔ)類型就是基礎(chǔ)類型,是不存在屬性方法概念的。

沒錯,又是JavaScript的餿主意,其引擎允許我們像操作對象一樣使用屬性方法操作基礎(chǔ)類型的數(shù)據(jù)。

在講解這個奇怪的特性之前,我們要先明確基礎(chǔ)類型和對象類型之間的差別是什么?

  1. 何為基礎(chǔ)類型

    • JavaScript基礎(chǔ)類型中的中一種值;

    • JavaScript中存在7種基礎(chǔ)類型,分別是:String、Number、Boolean、BigInt、Symbolnullundefined;

  2. 何為對象類型

    • 一個數(shù)據(jù)包,使用{ }創(chuàng)建,能存儲多個值;

    • JavaScript還有其他類型的對象,例如函數(shù);

面向?qū)ο笾袝婕埃雽ο蟮囊粋€關(guān)鍵特性是封裝,它可以把各種亂七八糟的數(shù)據(jù)、方法統(tǒng)一的存儲在一個對象中,從而降低使用的復(fù)雜性。

例如:

let user = {
    name : "xiaoming",
    hello() {
        console.log(`你好,我是${this.name}`);
    }}user.hello();

我們把對象user的屬性和方法封裝成了一個對象,這樣在使用的時候就非常簡單,我們只需要使用obj.attr的方式就能調(diào)用方法或者屬性。

但是,這么做是由額外的開銷的(面向?qū)ο笥蓄~外的開銷),這也是面向?qū)ο蟮恼Z言C++相比于C慢的地方。

基礎(chǔ)類型當(dāng)作對象使用

面臨的問題

基礎(chǔ)類型作為對象使用存在兩個難以調(diào)和的問題:

  1. 我們希望對基礎(chǔ)類型的操作可以像使用對象一樣,例如"abc".toUpperCase();

  2. 對象有額外開銷,我們又希望保持基礎(chǔ)類型的簡單、高效特性;

解決的方法

JavaScript解決以上問題的方式相當(dāng)?shù)摹昂拖∧唷保?/p>

  1. 基礎(chǔ)類型就是基礎(chǔ)類型,提供獨立的、單個的值;

  2. 允許訪問String、Number、BooleanSymbol類型的方法和屬性;

  3. 為了保證理論的完整,在使用基礎(chǔ)類型的方法和屬性時,先將其包裝成對象,隨后在銷毀;

以上規(guī)則的意思是,基礎(chǔ)類型仍然是基礎(chǔ)類型,但是呢,如果我們想訪問基礎(chǔ)類型的方法和屬性,就會把基礎(chǔ)類型包裝成對象(對象包裝器),等訪問完了再銷毀。講真,聽起來多少有點扯。

背后的事件

舉個例子:

let name = "Trump";console.log(name.toUpperCase());//訪問基礎(chǔ)類型的方法

以上代碼的執(zhí)行結(jié)果如下:

JavaScript如何實現(xiàn)基礎(chǔ)類型、對象一樣有屬性和方法

看起好像也沒什么大問題,但是,其中發(fā)生了很多事情,我們需要知道以下幾點:

  1. name是個字符串基礎(chǔ)類型,它本身沒啥特別的地方;

  2. 在訪問name屬性方法的時候,創(chuàng)建了一個包含字符串值的特殊對象,這個對象有toUpperCase方法;

  3. 調(diào)用特殊對象的方法toUpperCase返回一個的字符串;

  4. 特殊對象用完即銷毀;

變量本身的值并沒有發(fā)生改變,如下:

JavaScript如何實現(xiàn)基礎(chǔ)類型、對象一樣有屬性和方法

妥協(xié)的結(jié)果

雖然解決方法充滿了妥協(xié)(餿主意),但是,結(jié)果還是好的,達成的成就如下:

  1. 基礎(chǔ)類型保持了本身的簡單、高效;

  2. 基礎(chǔ)類型通過特殊對象擁有了屬性和方法;

  3. 保持了理論的完整,即只有對象才有屬性和方法;

理論上雖然如此,但實際上JavaScript引擎高度優(yōu)化了這個過程,我懷疑它根本就沒有創(chuàng)建額外的對象。只是在口頭上表示自己遵循了規(guī)范,好像真的搞了個臨時對象一樣。

常用方法舉例

本文只是簡單的介紹基礎(chǔ)類型方法的概念,并不對各種方法進行講解,伴隨著教程不斷深入,會逐步涉及大量的方法。這里只簡單的列舉基礎(chǔ)類型常用的一些方法和屬性。

不同的基礎(chǔ)類型,擁有不同的屬性方法,以下分類列舉:

String

  1. length屬性,返回字符串長度

    console.log("abc".length);

    以上代碼結(jié)果如下:

    JavaScript如何實現(xiàn)基礎(chǔ)類型、對象一樣有屬性和方法

  2. indexOf(ch)方法,返回字符串中第一個字符ch的下標(biāo)

    console.log("abc".indexOf('b'));console.log("abc".indexOf('d'));

    代碼執(zhí)行結(jié)果如下:

    JavaScript如何實現(xiàn)基礎(chǔ)類型、對象一樣有屬性和方法

    當(dāng)字符存在于字符串返回下標(biāo)(從0開始計),如果找不到就返回-1

  3. concat(str)方法,拼接兩個字符串

    let str1 = "hello ";let str2 = "world!";console.log(str1.concat(str2));console.log(str1);console.log(str2);

    代碼執(zhí)行結(jié)果如下:

    JavaScript如何實現(xiàn)基礎(chǔ)類型、對象一樣有屬性和方法

  4. replace(str1,str2)方法,使用str2替換str1

    let str = "javascript";console.log(str.replace('java','996'));console.log(str);

    代碼執(zhí)行結(jié)果如下:

    JavaScript如何實現(xiàn)基礎(chǔ)類型、對象一樣有屬性和方法

Number

  1. toFixed(num)方法,四舍五入小數(shù)到指定精度

    console.log(9.3333333.toFixed(3));console.log(9.3333333.toFixed(0));

    代碼執(zhí)行結(jié)果如下:

    JavaScript如何實現(xiàn)基礎(chǔ)類型、對象一樣有屬性和方法

  2. toString()方法,轉(zhuǎn)數(shù)字為字符串

    3.14.toString();//轉(zhuǎn)為'3.14'console.log((8).toString(2));//轉(zhuǎn)為二進制'1000'console.log((9).toString(2));//轉(zhuǎn)為二進制'1001'console.log((996).toString(16));//轉(zhuǎn)為16進制字符串'3e4'

    代碼執(zhí)行結(jié)果如下:

    JavaScript如何實現(xiàn)基礎(chǔ)類型、對象一樣有屬性和方法

  3. toExponential()方法,轉(zhuǎn)為指數(shù)計數(shù)法

    console.log(3.1415926.toExponential());console.log(3.1415926.toExponential(2));console.log(3.1415926.toExponential(3));

    代碼執(zhí)行結(jié)果如下:

    JavaScript如何實現(xiàn)基礎(chǔ)類型、對象一樣有屬性和方法

后繼章節(jié)會展示更多的方法,這里就不過的贅述。

基礎(chǔ)類型構(gòu)造函數(shù)(不推薦使用的特性)

Java一樣,JavaScript可以通過new操作符,顯式的為基礎(chǔ)類型創(chuàng)建“對象包裝器”,這種做法是極其不推薦的,這里提出,僅為了知識的完整性。

這種做法存在問題,舉例如下:

let num = new Number(0);console.log(typeof num);console.log(typeof 0);

代碼執(zhí)行結(jié)果如下:

JavaScript如何實現(xiàn)基礎(chǔ)類型、對象一樣有屬性和方法

亦或者,在判斷中會出現(xiàn)混淆:

let zero = new Number(0);if (zero) { // zero 為 true,因為它是一個對象
  console.log('true');}

代碼執(zhí)行結(jié)果如下:

JavaScript如何實現(xiàn)基礎(chǔ)類型、對象一樣有屬性和方法

同時,大家不要忘了,不帶 new(關(guān)鍵字)的 String/Number/Boolean 函數(shù)可以將一個值轉(zhuǎn)換為相應(yīng)的類型:轉(zhuǎn)成字符串、數(shù)字或布爾值(原始類型)。

例如:

console.log(typeof Number('123'));

注意:

nullundefined兩種類型沒有任何方法

關(guān)于“JavaScript如何實現(xiàn)基礎(chǔ)類型、對象一樣有屬性和方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。


本文標(biāo)題:JavaScript如何實現(xiàn)基礎(chǔ)類型、對象一樣有屬性和方法
網(wǎng)站路徑:http://weahome.cn/article/gedcij.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部