一. 數(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方法
- string???? ? "12px" => NaN “” => 0
- boolean???? ? true => 1 false => 0
- null ???? ? null => 0
- undefined???? ? undefined => NaN
- {} ???? ? {} => NaN
- [] ???? ? [1]=>1,[]=>0,[1,2]=>NaN
- 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
- 0 數(shù)字0
- NaN 數(shù)字NaN
- "" 空字符串
- false 布爾值false
- undefined undefined類型
- null null類型
用的不多了解幾個,大多用隱式轉(zhuǎn)換,這個后面會將,先了解