1. 變量
最新的ECMAScript標(biāo)準(zhǔn)定義了7種數(shù)據(jù)類型:
? 6種原始類型:Boolean蛋欣,Null寡夹,Undefined处面,Number,String菩掏,Symbol(ES6新增)
? 1種對(duì)象類型:object
通過typeof檢測(cè)類型:string魂角,number,boolean智绸,function野揪,object,undefined
JS萬物皆對(duì)象
我們以ECMAScript標(biāo)準(zhǔn)為準(zhǔn)传于,說明每個(gè)類型的特點(diǎn):
1. 字符串(String)
// 單引號(hào)定義
var title = 'hello string';
// 雙引號(hào)定義
var desc = "hello string";
// 反斜線定義(ES6)
var intro = `hello string`;
var name = 'Modeest';
var intro = `hello ${name}`; // hello Modeest
注意:
- 單引號(hào)囱挑,雙引號(hào),反斜線定義字符串沒有本質(zhì)的區(qū)別
- 在JS中推薦使用單引號(hào)(雙引號(hào)會(huì)和HTML的屬性沖突)
- 反斜線中可以解析變量(特定格式)沼溜,單雙引號(hào)都不可以
- 三種方式可以相互嵌套平挑,不能嵌套自身(除非使用轉(zhuǎn)義字符)
字符字面量:
\n | 換行 |
---|---|
\t | 制表 |
\b | 退格 |
\r | 回車 |
\\ | 斜杠 |
\' | 單引號(hào) |
\" | 雙引號(hào) |
\unnnn | 十進(jìn)制代碼 nnnn表示一個(gè)Unicode字符(n位0-F) |
特別注意:
字符串是不可改變的,字符串一旦創(chuàng)建系草,它們的值不能改變通熄,要改變,先要銷毀原來的字符串找都,用新值填充該變量
var lang = 'Java';
lang = lang + 'script';
2. 數(shù)值(number)
根據(jù)ECMAScript標(biāo)準(zhǔn)唇辨,JavaScript只有一種數(shù)字類型:基于IEEE754標(biāo)準(zhǔn)的雙精度64位二進(jìn)制格式的值。
-
整型
var int = 10; // 十進(jìn)制 var int = 070; // 八進(jìn)制(在嚴(yán)格模式下無效哦能耻,報(bào)錯(cuò)SyntaxError) var int = 0xA; // 十六進(jìn)制
-
浮點(diǎn)型
var float = 1.1; var float = 0.1; var float = .1; // 不推薦
注意:
0.1 + 0.2 === 0.3 // false 這是使用基于IEEE754數(shù)值的浮點(diǎn)計(jì)算的通病
-
NaN(Not a number)
概念:表示一個(gè)本來要返回?cái)?shù)值的操作數(shù)但是未返回?cái)?shù)值的情況 特點(diǎn): 1. 0/0報(bào)錯(cuò)赏枚,在JS中結(jié)果是NaN,正數(shù)/0為Infinity晓猛,負(fù)數(shù)/0位-Infinity 2. 任何涉及NaN的操作都返回NaN 3. NaN與任何值都不想等饿幅,包括自身 函數(shù): isNaN():判斷一個(gè)值是否是NaN isNaN()注意事項(xiàng): isNaN(obj):調(diào)用obj.valueOf(),判斷是否可以轉(zhuǎn)換為數(shù)值,不能再調(diào)用toString()戒职,再測(cè)試返回值栗恩。
檢測(cè)值 > +Infinity: Number.MAX_VALUE
檢測(cè)值 < -Infinity: Number.MIN_VALUE
檢測(cè)是否在雙精度浮點(diǎn)數(shù)的取值范圍
Number.isSafeInteger()
Number.MAX_SAFE_INTEGER
Number.MIN_SAFE_INTEGER
3. 布爾值(boolean)
- true:真
- false:假
4. 未定義(undefined)
undefined是全局對(duì)象的一個(gè)屬性
表明變量沒有被初始化
常見的情況:
- 未定義的變量
- 定義但是未賦值的變量
var title; // undefined
typeof age; // undefined
// 變量前置
console.log(username); // undefined
var username = 'Modeest';
主要功能:用于比較
ES3之前未引入,ES3引入為了區(qū)分 空對(duì)象指針與未經(jīng)初始化的變量洪燥。
5. null - 空對(duì)象指針
值null是一個(gè)字面量磕秤,null是表示缺少的標(biāo)識(shí)(“空值/空對(duì)象”),指示變量未指向任何對(duì)象捧韵。
常用于函數(shù)返回空對(duì)象
null與undefined
null:空對(duì)象的指針(在沒有保存對(duì)象之前申明為空對(duì)象)市咆,推薦針對(duì)空對(duì)象顯式設(shè)置
undefined:定義但是未賦值的變量值,一般不要顯式的設(shè)置
注意:
1. null == undefined // true,但是不推薦
2. null === undefined // false,推薦全等于判斷
6. Symbol
后面專門介紹Symbol
7. Object
后面專門介紹Object
2. 數(shù)據(jù)類型的相互轉(zhuǎn)換
1 其他類型 => 字符串:
1. String()
'title' => 'title'
1 => '1'
true => 'true'
['a', 'b', 'c'] => 'a,b,c'
null => 'null'
var fun = function(){}
String(fun) => 'function(){}' // 返回函數(shù)的內(nèi)容
var obj = {};
String(obj) => '[object Object]'
2. toString()
var age = 28;
age.toString(); // '28'
var b = true;
b.toString(); // 'true'
var o = { name: 'Modeest' };
o.toString(); // "[object Object]"
注意:
- 30.toString():語法錯(cuò)誤再来,不能直接調(diào)用
- null和undefined:沒有toString()方法
- toString(2|8|10|16):有進(jìn)制轉(zhuǎn)換能力
3. +空字符串
3 + ''
true + ''
2 其他類型 => 布爾值:Boolean()
轉(zhuǎn)換為布爾值為假的幾種情況:
- 空字符串('')
- 0
- NaN
- false
- undefined
- null
注意:除上述幾個(gè)值之外蒙兰,其余都轉(zhuǎn)為true(' ', '0','false'等都轉(zhuǎn)為布爾值true)
3 其他類型 => 數(shù)值
-
Number()
- true=>1 false=>0
- 數(shù)值類型 => 傳入和返回
- null => 0
- Undefined => NaN
- 字符串
1. 只包含數(shù)字和正負(fù)號(hào)的字符串,轉(zhuǎn)換為十進(jìn)制數(shù)字 2. 只包含有效的浮點(diǎn)數(shù),返回對(duì)應(yīng)的浮點(diǎn)數(shù) 3. 以0x開頭的有效十六進(jìn)制癞己,轉(zhuǎn)換為相同大小的十進(jìn)制:'0xf' => 16 4. '' => 0 5. 其他字符串 => NaN
- 對(duì)象
1. 先調(diào)用valueOf(),根據(jù)上面規(guī)則轉(zhuǎn)換 2. 如果得到NaN膀斋,再調(diào)用toString(),再根據(jù)規(guī)則進(jìn)行轉(zhuǎn)換
-
parseInt()
轉(zhuǎn)換規(guī)則:從第一個(gè)字符開始查找痹雅,直到找到非法字符(非數(shù)字)截止仰担,返回找到的數(shù)字(可以識(shí)別進(jìn)制)
1. parseInt('070') // 70 2. parseInt('12ab') // 12 3. parseInt('12.12ab') // 12 ES3引擎中,"070"被當(dāng)成八進(jìn)制字面量绩社,因此被轉(zhuǎn)換為十進(jìn)制56 ES5引擎中摔蓝,parseInt不具備解析八進(jìn)制能力,忽略前面的0愉耙,"070"解析結(jié)果是70 為了消除這些不確定結(jié)果贮尉,給parseInt傳遞第二個(gè)參數(shù)即可 4. parseInt('070', 2) 二進(jìn)制 0 5. parseInt('070', 8) 二進(jìn)制 56 6. parseInt('070', 10) 二進(jìn)制 70 7. parseInt('070', 16) 二進(jìn)制 112
parseFloat()的轉(zhuǎn)換規(guī)則
轉(zhuǎn)換規(guī)則:從第一個(gè)字符開始查找,直到找到非法字符(除數(shù)字和第一個(gè)小數(shù)點(diǎn)之外的字符)截止朴沿,返回找到的數(shù)字
parseFloat('1234abcd'); // 1234
parseFloat('12.23ab'); // 12.34
parseFloat('0xA'); // 0
parseFloat('023'); // 23
注意:parseFloat只解析十進(jìn)制猜谚,八進(jìn)制忽略前面的0,十六進(jìn)制返回0