第二節(jié):JavaScript中的數(shù)據(jù)類型及類型轉(zhuǎn)換

一. 數(shù)據(jù)類型

JavaScript中的值,無論是字面量還是變量锌介,都有明確的類型令哟。

1. 概述

1.1 基本類型5種

number 數(shù)字類型

string 字符串類型

boolean 布爾類型钞螟,僅有兩個值true 和 false勤众,講if語句時我們細(xì)說

undefined undefined類型论寨,這中類型值只有一個,就是undefined

null null類型赖临,這種類型的值也就只有一個null,之后在說

1.2 引用類型

講到再說


2. 數(shù)據(jù)類型的檢測

使用typeof關(guān)鍵字檢查數(shù)據(jù)類型,通常用來檢測變量的類型,因為直接量的類型一眼就看的出來

var a = 123;
console.log(typeof a);       //number


2.1 . number 數(shù)字類型

所有的number類型

    //下面定義的變量都是number類型
    var a = 200;       
    var b = -123;
    var c = 123.456;
    var d = .5e4;
    var e = 0xf0;
    var f = 016;
    var g = Infinity;       
    var h = NaN;

    console.log(typeof a);
    console.log(typeof b);
    console.log(typeof c);
    console.log(typeof d);
    console.log(typeof e);      
    console.log(typeof f);
    console.log(typeof g);
    console.log(typeof h);

JS中所有的數(shù)字都是number類型的胞锰,不在細(xì)分為整形int、浮點型float這些亂七八糟的東西兢榨。

number類型的東西, 所有的數(shù)字(不分正負(fù),整浮,大小,進(jìn)制,),Infinity, NaN


2.2 . string 字符串類型
var str1 = "您好啊";
var str2 = "250";   
var str3 = "";      //空字符串嗅榕,也是字符串
console.log(typeof str1);
console.log(typeof str2);
console.log(typeof str3);


2.3 . boolean類型

boolean類型(布爾類型), 布爾類型只有兩個值true,false,即真或假

var bool = true;  
console.log(bool );
console.log(typeof bool );      //boolean

注意:此時true,和false沒有加引號,所以不是字符串, 同時注意它也是變量,true時一個關(guān)鍵字, 本省就有特殊意義,表示真和假,


2.4 . undefined 類型

前面說過,如果只var了一個變量吵聪,沒有賦初值凌那,它的默認(rèn)值是undefined;

這個undefined是自成一家,類型和值都是undefined吟逝。這種類型的值頁只有一個案怯。

var un;   //我只定義了,沒有賦初值澎办,所以就是undefined嘲碱,類型也是undefined
console.log(un);
console.log(typeof un);      //undefined


3. 變量的類型

變量是什么類型,和賦的值有關(guān)系局蚀,而和定義的時候是沒有關(guān)系的麦锯。定義的時候,都是用var關(guān)鍵字定義的琅绅。

// 動態(tài)數(shù)據(jù)類型
var num = 123;  //number
console.log(typeof num);      
num = "哈哈";  //改為string是合法的
console.log(typeof num);

我們說js這個語言叫做動態(tài)數(shù)據(jù)類型扶欣,原因就在這里,

就是賦值的時候就決定這個變量的類型了千扶。甚至可以改變這個變量的值料祠,為其他類型的值。變量的類型是自動檢測的澎羞,就是檢查變量存儲的值的類型,不是認(rèn)為定義的髓绽。


二. 運算符:加號 +

我們先看一個運算符加號,因為它比較特殊

加號兩邊都是數(shù)字的時候妆绞,那么就是數(shù)學(xué)加法顺呕;兩邊只要有一遍是字符串枫攀,那么結(jié)果就是字符串拼接。

console.log("您" + "好");  //您好
console.log(3 + 2);     //5
console.log(3 + "2");    //32

因為2被引號引起來了株茶,所以就是字符串来涨,所以+就是連字符

所以要知道加號結(jié)果是什么, 一定要知道加號左右兩側(cè)的數(shù)據(jù)類型,在初期學(xué)習(xí)中很容易出的問題

實例:

var a = "10";
var b = "2";
console.log(a + b);    //102
var a = 10;
var b = 2;
console.log("a" + b);   //a2

多個加號,運算順序是從左算到右:

var a = 3;
var b = 2;
var c = 5;
console.log(a+b+'c');
console.log("a" + a + b + "c");  //a32c
var a = 3;
var b = 2;
var c = 5;
console.log(a + b + "c");        //5c

console.log(1 + 2 + "a" + "(3 + 4)");

發(fā)現(xiàn)沒有,運算從左到有計算,默認(rèn)是數(shù)字加分,但是一旦遇到字符串就變成字符串拼接了


三. 數(shù)據(jù)類型轉(zhuǎn)換

數(shù)據(jù)類型轉(zhuǎn)換就是其字面意思, 講一種數(shù)據(jù)類型轉(zhuǎn)換為另外一種數(shù)據(jù)類型

先來理解一下,
在JS中有一些方法可以將內(nèi)存中表示其他數(shù)據(jù)類型轉(zhuǎn)換為對應(yīng)的數(shù)字類型

因此我們要先認(rèn)識一個語句prompt()启盛,這個語句和alert差不多蹦掐,也是彈窗,彈的是輸入框:

prompt("請輸入你的電話","138")

這些小功能僵闯,就叫做程序給我們提供的API卧抗,每個API都有自己不同的語法。

prompt(“提示文本”,”默認(rèn)值”);

默認(rèn)值可以省略棍厂。

可以把用戶輸入的值颗味,存入變量:

var a = prompt("請輸入你的電話","138");
alert("哈哈超陆,你輸入的電話是" + a);

用prompt接收的任何東西都是字符串牺弹,哪怕用戶輸入了一個數(shù)字,也是字符串的數(shù)字时呀。

接下來,讓我們學(xué)習(xí)數(shù)據(jù)類型轉(zhuǎn)換, 首先學(xué)習(xí)講其他數(shù)據(jù)類型轉(zhuǎn)為數(shù)字類型

1. 轉(zhuǎn) number
  • Number方法

    1. string???? ? "12px" => NaN “” => 0
    2. boolean???? ? true => 1 false => 0
    3. null ???? ? null => 0
    4. undefined???? ? undefined => NaN
    5. {} ???? ? {} => NaN
    6. [] ???? ? [1]=>1,[]=>0,[1,2]=>NaN
    7. function ???? ? Number(function(){}) => NaN

    例子:

    //計算器
    //第1步讓用戶先輸入第1個數(shù)字
    var a = prompt("請輸入第1個數(shù)字啊");
    //第2步讓用戶先輸入第2個數(shù)字
    var b = prompt("請輸入第2個數(shù)字啊啊");
    //第3步求和
    var sum = Number(a) + Number(b);
    //第4步彈出結(jié)果
    alert(sum);
    


  • parseInt方法

parseInt就是將一個string轉(zhuǎn)為一個整數(shù)张漂,不四舍五入,直接截取整數(shù)部分谨娜。如果這個string有亂七八糟的東西航攒,那么就截取前面數(shù)字部分。

所以使用這個方法可能會丟失小數(shù)部分

var a = "678";
var b = parseInt(a);    //parseInt就把字符串678轉(zhuǎn)為數(shù)字678了
console.log(b);         //678
console.log(typeof b);  //number

下面的實例結(jié)果都是250趴梢,最后一個是-250:

parseInt("250") //250
parseInt("250.666")  //250
parseInt("250年都會很愛你們")   //250
parseInt("250年零個3月又11天")        //250
parseInt("250px")       //250
parseInt("-250.99999999") //-250

parseInt()不僅僅能夠轉(zhuǎn)為整數(shù)漠畜,還可以進(jìn)行進(jìn)制的轉(zhuǎn)換,把任何進(jìn)制的數(shù)字坞靶,都換為10進(jìn)制憔狞。

進(jìn)制轉(zhuǎn)換的字符串,用逗號隔開彰阴。

下面的運算結(jié)果都是15:

parseInt(15,10)
parseInt(17,8)
parseInt(1111,2)
parseInt("0xf",16)
parseInt("f",16)
parseInt(16,9)
parseInt("15e6",10)
parseInt("15*6",10)

parseInt如果不能轉(zhuǎn)瘾敢,那么就返回NaN

1parseInt("Hello", 8);   //NaN
parseInt("五百年");    //NaN


  • parseFloat方法

parseFloat就是將字符串轉(zhuǎn)為浮點數(shù)

盡可能的將一個字符串轉(zhuǎn)為浮點數(shù),浮點數(shù)之后如果有亂七八糟的內(nèi)容尿这,直接舍棄簇抵。

var a = "123.456.888";
var b = parseFloat(a);
console.log(b);      //123.456

console.log(parseFloat("123.67年"));     //123.67
console.log(parseFloat("哈哈123.67年"));   //NaN

也就是說,數(shù)字類型都是number射众,不分整數(shù)和浮點數(shù)碟摆,但是轉(zhuǎn)換的時候分。


  • isNaN()方法

作用:判斷一個數(shù)字是不是NaN
如果是,則結(jié)果是true;如果不是,則結(jié)果是false

isNaN()方法的作用是判斷數(shù)字是不是NaN叨橱,那它能判斷其他數(shù)據(jù)類型嗎焦履?拓劝?

isNaN(true) ==> false
isNaN(’12.5px’) ==> true
isNaN(null) ==> false
isNaN(undefined) ==> true

結(jié)論:

isNaN()這個方法會先把其他類型數(shù)據(jù)轉(zhuǎn)化成數(shù)字類型,之后判斷是不是NaN


2. 轉(zhuǎn) string

將一個數(shù)字嘉裤,與一個空字符串進(jìn)行連字符運算郑临,那么就是自動轉(zhuǎn)為字符串了。

var a = 123;
var b = a + "";
console.log(b);
console.log(typeof b);


3. 轉(zhuǎn) boolean
  • Boolean() 方法

    只有六種情況Boolean(被轉(zhuǎn)換的數(shù)據(jù))的結(jié)果是false,其余全是true

    1. 0 數(shù)字0
    2. NaN 數(shù)字NaN
    3. "" 空字符串
    4. false 布爾值false
    5. undefined undefined類型
    6. null null類型

    用的不多了解幾個,大多用隱式轉(zhuǎn)換,這個后面會將,先了解

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末屑宠,一起剝皮案震驚了整個濱河市厢洞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌典奉,老刑警劉巖躺翻,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異卫玖,居然都是意外死亡公你,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門假瞬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陕靠,“玉大人,你說我怎么就攤上這事脱茉〖艚妫” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵琴许,是天一觀的道長税肪。 經(jīng)常有香客問我,道長榜田,這世上最難降的妖魔是什么益兄? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮箭券,結(jié)果婚禮上净捅,老公的妹妹穿的比我還像新娘。我一直安慰自己邦鲫,他們只是感情好灸叼,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著庆捺,像睡著了一般古今。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上滔以,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天捉腥,我揣著相機(jī)與錄音,去河邊找鬼你画。 笑死抵碟,一個胖子當(dāng)著我的面吹牛桃漾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拟逮,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼撬统,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了敦迄?” 一聲冷哼從身側(cè)響起恋追,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎罚屋,沒想到半個月后苦囱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡脾猛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年撕彤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猛拴。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡羹铅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出漆弄,到底是詐尸還是另有隱情睦裳,我是刑警寧澤造锅,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布撼唾,位于F島的核電站,受9級特大地震影響哥蔚,放射性物質(zhì)發(fā)生泄漏倒谷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一糙箍、第九天 我趴在偏房一處隱蔽的房頂上張望渤愁。 院中可真熱鬧,春花似錦深夯、人聲如沸抖格。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雹拄。三九已至,卻和暖如春掌呜,著一層夾襖步出監(jiān)牢的瞬間滓玖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工质蕉, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留势篡,地道東北人翩肌。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像禁悠,于是被迫代替她去往敵國和親念祭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355