JavaScript——數(shù)據(jù)類型

JavaScript學(xué)習(xí)筆記(一)——數(shù)據(jù)類型

雖然JavaScript是一種“弱類型”的腳本語言,但數(shù)據(jù)本身仍屬于某種數(shù)據(jù)類型瞬痘,本文對JavaScript中的數(shù)據(jù)類型作了簡要介紹酥馍。

0x01 JavaScript中的數(shù)據(jù)類型

  1. ES6[1]之前的數(shù)據(jù)類型有6種

    • Undefinrd
    • Number
    • String
    • Boolean
    • Null
    • Object
  2. ES6之后添加了1種

    • Symbol

0x02 JavaScript中的typeof運(yùn)算符

typeof可以在程序運(yùn)行過程中動(dòng)態(tài)獲取數(shù)據(jù)的數(shù)據(jù)類型辩昆。

  • typeof語法格式:

    typeof 變量名

  • typeof運(yùn)算符的運(yùn)算結(jié)果是以下6個(gè)字符串之一(字母全小寫)

    “undefined”, "number", "object", "string", "fuction", "boolean"

示例:

function sum(a, b) {
    if (typeof a == "number" && typeof b == "number") {
        return a + b;
    }
}

調(diào)用函數(shù):

alert(sum(1, 2));

此時(shí)瀏覽器會(huì)彈窗,結(jié)果為3

注意下面代碼的執(zhí)行結(jié)果:

var i;
alert(typeof i);//結(jié)果為undefined
var j = 10;
alert(typeof i);//結(jié)果為number
var s = "abc";
alert(typeof s);//結(jié)果為string
var k = false;
alert(typeof i);//結(jié)果為boolean
var n = null;
alert(typeof n);//結(jié)果為object!!!!!!
var obj = new Object();
alert(typeof obj);//結(jié)果為object
//對于上述定義的函數(shù)sum
alert(typeof sum);//結(jié)果為function

0x03 Undefined類型

Undefined類型只有一個(gè)值:undefined

當(dāng)一個(gè)變量沒有賦值時(shí)旨袒,系統(tǒng)默認(rèn)是undefined

var i;
var j = undefined;
var k = "undefined";
alert(i == j);//true
alert(i == k);//false

0x04 Number類型

Number類型包含的值:負(fù)數(shù)汁针、整數(shù)术辐、不是數(shù)字(Not a Number)、無窮大

例:-1,0,1,2.2施无,NaN Infinity

var i = -1;
var j = 0;
var k = 1;
var m = 2.2;
var n = NaN;
var q = Infinity;
alert(typeof i);//number
alert(typeof j);//number
alert(typeof k);//number
alert(typeof m);//number
alert(typeof n);//number
alert(typeof q);//number

什么時(shí)候運(yùn)算結(jié)果是NaN?
運(yùn)算結(jié)果本來應(yīng)該是一個(gè)數(shù)字辉词,但運(yùn)算結(jié)束后結(jié)果不是一個(gè)數(shù)字時(shí)結(jié)果為NaN.
例如:

var a = 10;
var b = "hello";
alert(a / b);//NaN

但是下面的代碼結(jié)果不是NaN!

alert(a + b);

結(jié)果為10hello,這里的+作字符串拼接猾骡,而不作加法運(yùn)算瑞躺。

當(dāng)除數(shù)為0是,運(yùn)算結(jié)果為Infinity.

var a = 10;
var b = 0;
alert(a / b);//Infinity

isNaN(a)函數(shù):

  • a不是數(shù)字時(shí)運(yùn)算結(jié)果為true兴想;
  • a是數(shù)字時(shí)結(jié)果為false

示例:

function sum(a, b) {
    if (isNaN(a) || isNaN(b)) {
        alert("參與運(yùn)算的必須是數(shù)字幢哨!");
    }
    return a + b;
}
//調(diào)用
sum(10, "12");//參與運(yùn)算的必須是數(shù)字!
sum(10, 12);//22

0x05 Boolean類型

JavaScript中的Boolean類型只有兩個(gè)值:truefalse

Boolean()函數(shù):將非Boolean類型的數(shù)據(jù)轉(zhuǎn)換為Boolean類型(一般程序會(huì)自動(dòng)調(diào)用嫂便,無需手寫)捞镰。

例如:

var username = "";
if (username) { //此處會(huì)自動(dòng)調(diào)用Boolean()函數(shù),轉(zhuǎn)換結(jié)果為false
    alert("Hello " + username)
} else {
    alert("用戶名不能為空毙替!");//此句代碼被執(zhí)行
}

常用的Boolean()函數(shù)結(jié)果:

alert(Boolean(1));//true
alert(Boolean(0));//false
alert(Boolean(""));//false
alert(Boolean("abc"));//true
alert(Boolean(NaN));//false
alert(Boolean(null));//false
alert(Boolean(undefined));//false
alert(Boolean(Infinity));//true

0x06 Null類型

Null類型只有一個(gè)值:null

但是岸售,typeof null運(yùn)行的結(jié)果是Object


0x07 String類型

在JavaScript中,創(chuàng)建字符串的方式:

  • 第一種:
var s = "abc";
  • 第二種:
 var s = new String("abc";)

注意:String是一個(gè)內(nèi)置的類厂画,其父類是Object凸丸。

示例:

//小string(屬于原始類型String)
var s1 = "abc";
alert(typeof s1);//string
//大String(屬于Object)
var s2 = new String("abc");
alert(typeof s2);//object

小string和大String的屬性和函數(shù)通用。

  • 常用的String類型的常用屬性和函數(shù):
    1. length:返回字符串的長度
    2. charAt():返回指定位置(下標(biāo))的字符
    3. indexOf():返回給定的字符串在此字符串中第一次出現(xiàn)處的索引
    4. lastIndexOf():返回給定的字符串在此字符串中最后一次出現(xiàn)處的索引
    5. replace():替換
    6. split():拆分字符串
    7. toLowerCase():將字符串字母全部轉(zhuǎn)換為小寫
    8. toUpperCase():將字符串字母全部轉(zhuǎn)換為大寫
    9. substr():截取指定長度的子字符串
    10. substring():截取指定位置(左開右閉)的子字符串

示例:

var s = "http://www.baidu.com";
alert(s.indexOf("http"));//0
alert(s.indexOf("https"));//-1
alert(s.charAt(3));//p
alert(s.replace("http", "https"));//https://www.baidu.com,只替換一次
alert(s.substr(2, 4));//tp:/ 表示從2開始取4個(gè)字符
alert(s.substring(2, 4));//tp 表示取位置為[2,4)的字符袱院,不包含4

0x08 Object類型

  • Object類型是所有類型的超類屎慢,自定義的任何類型,默認(rèn)繼承Object.

  • Object類型常用的屬性:

  • prototype(最常用):給類動(dòng)態(tài)的擴(kuò)展屬性和函數(shù)坑填。

  • constructor

  • Object類包含的函數(shù)

  • toString()

  • valueOf()

  • toLocalString()

在JavaScript中定義類的方法(和定義函數(shù)相同):

  • 第一種方法:

    function 類名(形參) {
        
    }
    
  • 第二種方法:

    類名 = function(形參) {
        
    }
    

判斷一段代碼是類還是函數(shù)具體要看怎么使用抛人。
例如:

function sayHello() {

}
//把sayHello當(dāng)做函數(shù)
sayHello();
//把sayHello當(dāng)做類
var obj = new sayHello();

在JavaScript中定義類的同時(shí)又是一個(gè)構(gòu)造函數(shù)的定義

function Student(name, age) {
    this.name = name;
    this.age = age;
}

代表Student類中有兩個(gè)屬性nameage

//創(chuàng)建對象
var stu = new Student("Eric", 25);
//訪問屬性
alert(stu.age);//25
alert(stu.name);//Eric
//訪問屬性的另一種語法
alert(stu["age"]);//25
alert(stu["name"]);//Eric

在類中定義函數(shù):

Product = function(pno, pname, price) {
    //屬性
    this.pno = pno;
    this.pname = pname;
    this.price = price;
    //方法
    this.getPrice = function() {
        return this.price;
    }
}
var pro = new Product(1, "Apple", 6.0);
var pri = pro.getPrice();
alert(pri);//6.0

此外還可以通過prototype屬性給類動(dòng)態(tài)擴(kuò)展屬性和方法:

//動(dòng)態(tài)擴(kuò)展一個(gè)getName()函數(shù)
Product.prototype.getName = function() {
    return this.pname;
}
//調(diào)用動(dòng)態(tài)擴(kuò)展的函數(shù)
var pna = pro.getName();
alert(pna);//Apple

0x09 區(qū)分null脐瑰、NaN和undefined

  • 數(shù)據(jù)類型不一致

    alert(typeof null);//object
    alert(typeof NaN);//number
    alert(typeof undefined);//undefined
    
  • null和undefined可以等同

    alert(null == undefined);//true
    alert(null == NaN);//false
    alert(NaN == undefined);//false
    

0x0A 區(qū)分=====

==:等同運(yùn)算符 => 只判斷值是否相等妖枚。

===:全等運(yùn)算符 => 既判斷值是否相等,又判斷數(shù)據(jù)類型是否相同苍在。

alert(null === undefined);//false
alert(null === NaN);//false
alert(NaN === undefined);//false
alert(1 == true);//true
alert(1 === true);//false

by xiaoxin_zh
2022.4.18



  1. ECMAScript6(簡稱ES6)是于2015年6月正式發(fā)布的JavaScript語言的標(biāo)準(zhǔn)绝页,正式名為ECMAScript 2015(ES2015)。它的目標(biāo)是使得JavaScript語言可以用來編寫復(fù)雜的大型應(yīng)用程序寂恬,成為企業(yè)級開發(fā)語言续誉。 ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市初肉,隨后出現(xiàn)的幾起案子酷鸦,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件臼隔,死亡現(xiàn)場離奇詭異嘹裂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)摔握,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門寄狼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人氨淌,你說我怎么就攤上這事泊愧。” “怎么了盛正?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵删咱,是天一觀的道長。 經(jīng)常有香客問我蛮艰,道長腋腮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任壤蚜,我火速辦了婚禮,結(jié)果婚禮上徊哑,老公的妹妹穿的比我還像新娘袜刷。我一直安慰自己,他們只是感情好莺丑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布著蟹。 她就那樣靜靜地躺著,像睡著了一般梢莽。 火紅的嫁衣襯著肌膚如雪萧豆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天昏名,我揣著相機(jī)與錄音涮雷,去河邊找鬼。 笑死轻局,一個(gè)胖子當(dāng)著我的面吹牛洪鸭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播仑扑,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼览爵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了镇饮?” 一聲冷哼從身側(cè)響起蜓竹,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后俱济,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體司蔬,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年姨蝴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了俊啼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡左医,死狀恐怖授帕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情浮梢,我是刑警寧澤跛十,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站秕硝,受9級特大地震影響芥映,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜远豺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一奈偏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧躯护,春花似錦惊来、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至继准,卻和暖如春枉证,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背移必。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工室谚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人避凝。 一個(gè)月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓舞萄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親管削。 傳聞我的和親對象是個(gè)殘疾皇子倒脓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

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