js七大數(shù)據(jù)類型

js中有七種數(shù)據(jù)類型,包括流種基本數(shù)據(jù)類型(Number,String,Boolean,Undefined,Null贿衍,Symbols),和一種復(fù)雜數(shù)據(jù)類型(Object)。

三大引用類型

1.Object類型

我們看到的大多數(shù)類型值都是Object類型的實(shí)例,創(chuàng)建Object實(shí)例的方式有兩種肺然。
第一種是使用new操作符后跟Object構(gòu)造函數(shù),如下所示

var person = new Object(); person.name = "Micheal"; person.age = 24;

第二種方式是使用對象字面量表示法腿准,如下所示

var person = { name : "Micheal",age : 24};

2.Array類型

數(shù)組的每一項(xiàng)可以用來保存任何類型的數(shù)據(jù)际起,也就是說,可以用數(shù)組的第一個位置來保存字符串吐葱,第二個位置保存數(shù)值街望,第三個位置保存對象....另外,數(shù)組的大小是可以動態(tài)調(diào)整的弟跑。

創(chuàng)建數(shù)組的基本方式有兩種

第一種是使用Array構(gòu)造函數(shù)灾前,如下所示

var colors = new Array("red","blue","yellow");

第二種是使用數(shù)組字面量表示法,如下所示

var colors = ["red","blue","yellow"];

3 Function類型

每個函數(shù)都是Function類型的實(shí)例窖认,而且都與其他引用類型一樣具有屬性和方法豫柬。函數(shù)通常是使用函數(shù)聲明語法定義的,如下所示

function sum(num1,num2){return num1 + num2;};

這和使用函數(shù)表達(dá)式定義函數(shù)的方式相差無幾扑浸。

var sun = function (){return sum1 + sum2;};

基本數(shù)據(jù)類型

1:字符串

字符串類型中的單引號與雙引號的作用效果完全一樣烧给。

字符串有l(wèi)ength屬性『仍耄可以取得字符串的長度础嫡。var str = “hello”;console.log(str.length);//5

1:字符串的值是不可變的。要改變一個字符串的值酝惧,首先要銷毀原來的字符串榴鼎,再用另一個包含新值的字符串去填充該字符串。
var lang = “java”; lang += “script”;

上面這段代碼晚唇,先創(chuàng)建一個能容納10個字符的字符串巫财,然后在這個字符串中填充java和script字符串,最
后銷毀原來的字符串java和scrip字符串哩陕,因?yàn)檫@兩個字符串此時已經(jīng)沒用了平项。這個個過程是在后臺發(fā)生的。

2:字符串轉(zhuǎn)換:轉(zhuǎn)型函數(shù)String(),適用于任何數(shù)據(jù)類型(null,undefined 轉(zhuǎn)換后為null和undefined)悍及;toString()方法(null,undefined沒有toString()方法)闽瓢。

            var bc = "lijinwen";
            var bd = null;
            var be = undefined;
            console.log(bc.toString());
            //console.log(bd.toString());//error 報(bào)錯
            //console.log(be.toString());//error 報(bào)錯
            console.log("------");
            console.log(String(bc));
            console.log(String(bd));
            console.log(String(be));

2:數(shù)字 number

Number類型包含整數(shù)和浮點(diǎn)數(shù)(浮點(diǎn)數(shù)數(shù)值必須包含一個小數(shù)點(diǎn),且小數(shù)點(diǎn)后面至少有一位數(shù)字)兩種值心赶。

1:浮點(diǎn)數(shù)將會自動轉(zhuǎn)換為整數(shù)扣讼。
var num = 1.00; console.log(num); //1,自動轉(zhuǎn)換為整數(shù)

2:浮點(diǎn)數(shù)的最高精度是17位缨叫,看下面的例子椭符,結(jié)果竟然不是0.3荔燎,至于其他編程語言,也會遇到這種情況(關(guān)于浮點(diǎn)數(shù)計(jì)算會產(chǎn)生舍入誤差問題艰山,其他有些編程語言也會出現(xiàn)類似情況湖雹。)
var num1 = 0.1; var num2 = 0.2; console.log(num1 + num2);//0.30000000000000004

3:NaN:非數(shù)字類型。特點(diǎn):① 涉及到的 任何關(guān)于NaN的操作曙搬,都會返回NaN ② NaN不等于自身。
var ab = "a1"; console.log(ab/10);// NaN console.log(NaN == NaN);// false;

4:isNaN()函數(shù)鸽嫂,用于判斷是否是一個非數(shù)字類型纵装。如果傳入的參數(shù)是一個非數(shù)字類型,那么返回true据某;否則返回false;

5:isNaN()函數(shù)橡娄,傳入一個參數(shù),函數(shù)會先將參數(shù)轉(zhuǎn)換為數(shù)值癣籽。
如果參數(shù)類型為對象類型挽唉,會先調(diào)用對象的valueOf()方法, 再確定該方法返回的值是否可以轉(zhuǎn)換為數(shù)值類型筷狼。如果不能瓶籽,再調(diào)用對象的toString()方法,再確定返回值埂材。

6:數(shù)值轉(zhuǎn)換:

        Number()轉(zhuǎn)型函數(shù)塑顺,可以用于任何數(shù)據(jù)類型;
        parseInt()俏险,將值轉(zhuǎn)換為整型严拒,用的比較多;
        parseFloat()竖独;將值轉(zhuǎn)換為浮點(diǎn)型裤唠。

3:布爾 Boolean

 該類型只有兩個值,true和false
 轉(zhuǎn)換為boolean值: 轉(zhuǎn)型函數(shù)Boolean(),將某個值轉(zhuǎn)換為Boolean類型莹痢。詳細(xì)內(nèi)容种蘸,后面會慢慢的
 補(bǔ)充。

4:對象object

對象由花括號分隔格二。在括號內(nèi)部劈彪,對象的屬性以名稱和值對的形式
(name : value) 來定義。屬性由逗號分隔
var person={firstname:"Bill", lastname:"Gates", id:5566};


對象屬性有兩種尋址方式:
 person.key
 person['key']

5:Undefined 和 Null

 Undefined 這個值表示變量不含有值顶猜。
 可以通過將變量的值設(shè)置為 null 來清空變量沧奴。

null類型被看做空對象指針,前文說到null類型也是空的對象引用长窄。只有一個值滔吠,即null值纲菌,所以,在你 用typeof 操作符去檢測null類型的值時疮绷,結(jié)果是object類型翰舌。

如果你定義了一個變量,但是想在以后把這個變量當(dāng)做一個對象來用冬骚,那么最好將該對象初始化為null值

只有一個值椅贱,即undefined值。使用var聲明了變量只冻,但未給變量初始化值庇麦,那么這個變量的值就是undefined。

        var name = "lijinwen";
        var age;
        console.log(name);//lijinwen
        console.log(age);//undefined
        //console.log(height);//error喜德,變量height沒有聲明
        console.log(typeof name);//string
        console.log(typeof age);//undefined
        console.log(typeof height);//undefined山橄,變量height沒有聲明

上面這段代碼中,age雖然聲明了舍悯,但是沒有初始化值航棱,所以,打印出來的是undefined.而變量height沒有聲明萌衬,故報(bào)錯饮醇。

但是用typeof操作符去檢測數(shù)據(jù)類型的時候,變量age沒有初始化奄薇,結(jié)果是undefined驳阎,沒有聲明變量的height檢測的類型也是undefined.

JavaScript中出現(xiàn)undefined的幾種情況。

            訪問數(shù)組或?qū)ο蟛淮嬖诘某蓡T馁蒂。
            定義的變量未賦值呵晚。
            函數(shù)沒有返回值,或return后沒有數(shù)據(jù)

6:symbol

ES6引入了一種新的原始數(shù)據(jù)類型Symbol沫屡,表示獨(dú)一無二的值饵隙。

Symbol函數(shù)前不能使用new命令,否則會報(bào)錯沮脖。這是因?yàn)樯傻腟ymbol是一個原始類型的值金矛,不是對象
Symbol函數(shù)可以接受一個字符串作為參數(shù),表示對Symbol實(shí)例的描述勺届,主要是為了在控制臺顯示驶俊,或者轉(zhuǎn)為字符串時,比較容易區(qū)分免姿。
let name=Symbol('name'); let name2=Symbol('name'); console.log(name===name2) false

2:作為屬性名的Symbol
var mySymbol = Symbol();

第一種寫法
var a = {}; a[mySymbol] = 'Hello!';

第二種寫法
var a = {[mySymbol]: 'Hello!'};

第三種寫法
var a = {}; Object.defineProperty(a, mySymbol, { value: 'Hello!' });

// 以上寫法都得到同樣結(jié)果
a[mySymbol] // "Hello!"

Symbol值作為屬性名時饼酿,該屬性還是公開屬性,不是私有屬性。

注意故俐,Symbol值作為對象屬性名時想鹰,不能用點(diǎn)運(yùn)算符。

3:獲取屬性值

                let name= Symbol('name');
                let name1= Symbol('name1');
                let obj={
                    age:22,
                    [name]:'Leo',
                    [name1]:'Leoasd'
                };
                /*不可以打印出Symbol屬性
                console.log(Object.keys(obj));
                for(let i in obj){
                    console.log(k)
                }
                console.log(Object.getOwnPropertyNames(obj))`*/


        getOwnPropertySymbols返回對象的自有符號屬性药版。對象的自有符號屬性是指直接在此對象
        上定義辑舷、而非從對象的原型繼承的屬性。
        let key=Object.getOwnPropertySymbols(obj);    //[Symbol(name),Sumbol  (name1)]
        console.log(obj[key[0]]);

4:Symbol.for()槽片,Symbol.keyFor()
Symbol.for機(jī)制有點(diǎn)類似于單例模式何缓,首先在全局中搜索有沒有以該參數(shù)作為名稱的Symbol值,如果有还栓,就返回這個Symbol值歌殃,否則就新建并返回一個以該字符串為名稱的Symbol值。和直接的Symbol就點(diǎn)不同了蝙云。

      //for 根據(jù)for 后面的值去創(chuàng)建前面name
        let name=Symbol.for('name');
        let name1=Symbol.for('name');
        console.log(name===name1);   返回結(jié)果true

Symbol.keyFor方法返回一個已登記的Symbol類型值的key。實(shí)質(zhì)就是檢測該Symbol是否已創(chuàng)建
var s1 = Symbol.for("foo");
Symbol.keyFor(s1) // "foo"

                    var s2 = Symbol("foo");
                    Symbol.keyFor(s2) // undefined

·

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末路召,一起剝皮案震驚了整個濱河市勃刨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌股淡,老刑警劉巖身隐,帶你破解...
    沈念sama閱讀 212,332評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異唯灵,居然都是意外死亡贾铝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評論 3 385
  • 文/潘曉璐 我一進(jìn)店門埠帕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來垢揩,“玉大人,你說我怎么就攤上這事敛瓷∪蓿” “怎么了?”我有些...
    開封第一講書人閱讀 157,812評論 0 348
  • 文/不壞的土叔 我叫張陵呐籽,是天一觀的道長锋勺。 經(jīng)常有香客問我,道長狡蝶,這世上最難降的妖魔是什么庶橱? 我笑而不...
    開封第一講書人閱讀 56,607評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮贪惹,結(jié)果婚禮上苏章,老公的妹妹穿的比我還像新娘。我一直安慰自己馍乙,他們只是感情好布近,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,728評論 6 386
  • 文/花漫 我一把揭開白布垫释。 她就那樣靜靜地躺著,像睡著了一般撑瞧。 火紅的嫁衣襯著肌膚如雪棵譬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,919評論 1 290
  • 那天预伺,我揣著相機(jī)與錄音订咸,去河邊找鬼。 笑死酬诀,一個胖子當(dāng)著我的面吹牛脏嚷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瞒御,決...
    沈念sama閱讀 39,071評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼父叙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肴裙?” 一聲冷哼從身側(cè)響起趾唱,我...
    開封第一講書人閱讀 37,802評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜻懦,沒想到半個月后甜癞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,256評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宛乃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,576評論 2 327
  • 正文 我和宋清朗相戀三年悠咱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片征炼。...
    茶點(diǎn)故事閱讀 38,712評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡析既,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出柒室,到底是詐尸還是另有隱情渡贾,我是刑警寧澤,帶...
    沈念sama閱讀 34,389評論 4 332
  • 正文 年R本政府宣布雄右,位于F島的核電站空骚,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏擂仍。R本人自食惡果不足惜囤屹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,032評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逢渔。 院中可真熱鬧肋坚,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至铣鹏,卻和暖如春敷扫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诚卸。 一陣腳步聲響...
    開封第一講書人閱讀 32,026評論 1 266
  • 我被黑心中介騙來泰國打工葵第, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人合溺。 一個月前我還...
    沈念sama閱讀 46,473評論 2 360
  • 正文 我出身青樓卒密,卻偏偏與公主長得像,于是被迫代替她去往敵國和親棠赛。 傳聞我的和親對象是個殘疾皇子哮奇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,606評論 2 350

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

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,132評論 0 13
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,219評論 0 4
  • 第3章 基本概念 3.1 語法 3.2 關(guān)鍵字和保留字 3.3 變量 3.4 數(shù)據(jù)類型 5種簡單數(shù)據(jù)類型:Unde...
    RickCole閱讀 5,106評論 0 21
  • 什么是 JavaScript 語言睛约? JavaScript 是一種輕量級的腳本語言屏镊。所謂“腳本語言”(script...
    oWSQo閱讀 1,789評論 0 1
  • [TOC] 參考阮一峰的ECMAScript 6 入門參考深入淺出ES6 let和const let和const都...
    郭子web閱讀 1,773評論 0 1