javascript
javascript 之数据类型--01
寫在前面
國慶整理資料時(shí),發(fā)現(xiàn)剛開始入門前端時(shí)學(xué)習(xí)JS 的資料,打算以一個(gè)基礎(chǔ)入門博客記錄下來,有不寫不對的多多指教;
先推薦些書籍給需要的童鞋
《JavaScript 高級(jí)程序設(shè)計(jì).pdf》第三版
?《JavaScript權(quán)威指南(第六版).pdf》
《高性能javascript.pdf》
《JavaScript語言精粹---高清版.pdf》
《你不知道的JavaScript(上卷).pdf》
《你不知道的JavaScript(中卷).pdf》
數(shù)據(jù)類型
ECMAScript 中數(shù)據(jù)類型分為基本數(shù)據(jù)類型,復(fù)雜數(shù)據(jù)類型也稱為引用數(shù)據(jù)類型,即常說的對象;
基本數(shù)據(jù)類型是簡單的數(shù)據(jù)段,包括 String、Number、Boolean、Null、Undefined。
引用數(shù)據(jù)類型是由一組無序的名值對組成 如 Object;
基本數(shù)據(jù)類型
1、Undefined?類型
?Undefined 類型只有一個(gè)值,即 undefined。以下情況的值會(huì)是 undefined
(1)變量被聲明了,但沒有賦值,默認(rèn)值為undefined。
(2)調(diào)用函數(shù)時(shí),應(yīng)該提供的參數(shù)沒有提供,該參數(shù)等于undefined。
(3)對象沒有賦值的屬性,該屬性的值為undefined。
(4)函數(shù)沒有返回值時(shí),默認(rèn)返回undefined。
(5)未定義的變量使用typeof 返回undefined(嚴(yán)格模式下報(bào)錯(cuò))。
2、Null?類型
Null 只有一個(gè)值 null,null是javascript語言的關(guān)鍵字,它表示一個(gè)特殊值,常用來描述"空值",從邏輯角度來看,null 是一個(gè)空對象指針;通常要把一個(gè)變量來保存對象,那么最好將變量初始化為null;
[注意]null是空對象指針,而[]是空數(shù)組,{}是空對象,三者不相同;
null與undefined?都是表示無、不存在,那么為什么會(huì)同時(shí)存在呢?
1、一開始null像在Java、.net里一樣,被當(dāng)成一個(gè)對象。但是javascript的值分成原始類型和對象類型兩大類,作者認(rèn)為基本類型表示”無”的值最好不是對象。
2、javascript的最初版本沒有包括錯(cuò)誤處理機(jī)制,發(fā)生數(shù)據(jù)類型不匹配時(shí),往往是自動(dòng)轉(zhuǎn)換類型或者默默地失敗。作者認(rèn)為如果null自動(dòng)轉(zhuǎn)為0,很不容易發(fā)現(xiàn)錯(cuò)誤;
null?與undefined?區(qū)別又是什么呢?
目前來說,null和undefined基本是同義的,都是表示無,只是應(yīng)用場景不太一樣?如:
null表示"沒有對象",即該處不應(yīng)該有值。典型用法是:
- 作為函數(shù)的參數(shù),表示該函數(shù)的參數(shù)不是對象。
- 作為對象原型鏈的終點(diǎn)。
undefined表示"缺少值",就是此處應(yīng)該有一個(gè)值,但是還沒有定義/初始化。典型用法是:
- 變量被聲明了,但沒有賦值,默認(rèn)值為undefined。
- 調(diào)用函數(shù)時(shí),應(yīng)該提供的參數(shù)沒有提供,該參數(shù)等于undefined。
- 對象沒有賦值的屬性,該屬性的值為undefined。
- 函數(shù)沒有返回值時(shí),默認(rèn)返回undefined。
- 未定義的變量使用typeof 返回undefined(嚴(yán)格模式下報(bào)錯(cuò))。
(typeof null) //返回object 誤區(qū)
在 JavaScript 最初的實(shí)現(xiàn)中,JavaScript 中的值是由一個(gè)表示類型的標(biāo)簽和實(shí)際數(shù)據(jù)值表示的。對象的類型標(biāo)簽是0。由于 null?被設(shè)計(jì)成空指針(大多數(shù)平臺(tái)下值為0x00),因此,null的類型標(biāo)簽也成為了0,typeof null就錯(cuò)誤的返回了"object".(referenc) 但是如果修復(fù)了 會(huì)造成大量舊的js不兼容;
該現(xiàn)象有待于在ECMAScript 6中被修復(fù) (該提議已被否決). 正確的返回值將成為 typeof null === 'null'.
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/typeof?
3、Boolean?類型
Boolean 布爾類型有 true、false。在js中是區(qū)分大小寫的,即 True、False 并不是Boolean的值,雖然Boolean 只有這兩個(gè)值,但是在js中任何數(shù)據(jù)類型的值調(diào)用Boolean()函數(shù),都能返回一個(gè)Boolean值;只要記住如下規(guī)則即可:(0,-0,NaN,'',null,undefined)這六個(gè)永遠(yuǎn)為false,其它都為true
<script>var message = 'ds';if (message) {console.log('成功'+message)// 成功ds}var obj={};if(obj){console.log('成功'+obj)// 成功[object Object]}var a=0;if(a){console.log('成功'+a);}else{console.log('失敗'+a)// 失敗0}</script>4、Number?類型
在js中使用Number 類型來表示整數(shù)與浮點(diǎn)數(shù)(數(shù)值必須包含一個(gè)小數(shù)點(diǎn));
var intNum=66; //整數(shù)
var floatNum=1.1 //浮點(diǎn)數(shù)
如果某次計(jì)算的結(jié)果超出了Javascript 數(shù)值范圍(Number.MAX_VALUE 最大值 Number.MIX_VALUE)那么這個(gè)結(jié)果就會(huì)自動(dòng)轉(zhuǎn)為Infinity,如果這個(gè)數(shù)值是負(fù)數(shù)會(huì)轉(zhuǎn)為-Infinity(負(fù)無窮),如果是正數(shù)會(huì)轉(zhuǎn)為Infinity(正無窮)
NaN:非數(shù)值(Not a Number)是一個(gè)特殊的值,表示這里本應(yīng)該是一個(gè)數(shù)值,但是并不是數(shù)值; 如
var a=10,b='str';console.log(a*b);//NaNNaN 具有如下特點(diǎn):
1、任何與NaN的操作都是返回NaN;
2、NaN與任何值都不相等;
針對NaN的兩個(gè)特點(diǎn),ECMAScript定義了 isNaN()函數(shù)來確定某個(gè)變量/表達(dá)式結(jié)果是不是NaN,這個(gè)函數(shù)會(huì)嘗試把變量轉(zhuǎn)換為數(shù)值,如果不能轉(zhuǎn)換則返回true,反正返回false;
<script>console.log(isNaN('red'));//true 不能轉(zhuǎn)換numberconsole.log(isNaN('10'));//false 能轉(zhuǎn)換numberconsole.log(isNaN(10));//false 能轉(zhuǎn)換numberconsole.log(isNaN(false));//false 能轉(zhuǎn)換numberconsole.log(isNaN(true));//false 能轉(zhuǎn)換numberconsole.log(isNaN(''));//false 能轉(zhuǎn)換number 0console.log(isNaN(undefined));//true 不能轉(zhuǎn)換numberconsole.log(isNaN('undefined'));//true 不能轉(zhuǎn)換numberconsole.log(isNaN(null));//false 能轉(zhuǎn)換number 0console.log(isNaN('null'));//true 不能轉(zhuǎn)換number</script>typeof?基本數(shù)據(jù)類型檢查
<script>var s = 'name';console.log(typeof s)//string </script>typeof? ? ? ? ? ? ? ? ? ? ? ? ? ? 返回以下字符串
undefined? ? ? ? ? ? ? ? ? ? ? 這個(gè)變量未定義、未初始化
object? ? ? ? ? ? ? ? ? ? ? ? ? ? 這個(gè)變量是對象或者是null
boolean? ? ? ? ? ? ? ? ? ? ? ? ?這個(gè)變量是布爾值
number? ? ? ? ? ? ? ? ? ? ? ? ? 這個(gè)變量是數(shù)值
string? ? ? ? ? ? ? ? ? ? ? ? ? ? ?這個(gè)變量是字符串
function? ? ? ? ? ? ? ? ? ? ? ? ?這個(gè)變量是函數(shù)
引用數(shù)據(jù)類型
引用類型是一種用于將數(shù)據(jù)和功能組織在一起的數(shù)據(jù)結(jié)構(gòu)(也常被成為類),引用類型的值(對象)是引用類型的一個(gè)實(shí)例。但是js中沒有類的概念,因此引用類型也可以被稱為對象,因?yàn)樗麄兠枋龅氖菍傩院头椒ǖ募?#xff1b;
ECMAScript提供了很多原生引用類型(如:Object)
Object類型
我們看到的大部分引用類型都是Object類型的實(shí)例,Object的實(shí)例本身不具備很多功能,但對于在應(yīng)用程序中存儲(chǔ)和傳輸數(shù)據(jù)而言,是非常理想的選擇。
Array類型
除了Object之外,Array算是js最常用最常用的類型。js中的數(shù)組與其他語言的數(shù)組都是數(shù)據(jù)的有序列表,因?yàn)閖s是弱類型,所以js中數(shù)組的每一項(xiàng)可以保存任何類型的數(shù)據(jù);
Date類型
js中用于構(gòu)建日期對象的引用類型
RegExp類型
js通過RegExp類型來支持正則表達(dá)式
Function類型
js中的function實(shí)際上是對象,每個(gè)函數(shù)都是Function類型的實(shí)例,而且都與其他引用類型一樣具有屬性和方法。由于函數(shù)是對象,因此函數(shù)名實(shí)際上也是一個(gè)指向函數(shù)對象的指針;
引用類型提供的屬性以及方法這里不在敘述,不知道的可以參考如下連接
http://www.w3school.com.cn/jsref/jsref_obj_array.asp
instanceof? 檢測某個(gè)實(shí)例的具體類型?
語法:
object instanceof constructor描述:
instanceof 運(yùn)算符用來檢測 constructor.prototype 是否存在于參數(shù) object 的原型鏈上。
可以理解為 instanceof 用于判斷某個(gè)實(shí)例(對象)是否是某個(gè)類型的實(shí)例;
?
轉(zhuǎn)載于:https://www.cnblogs.com/CandyManPing/p/7720278.html
總結(jié)
以上是生活随笔為你收集整理的javascript 之数据类型--01的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript高级程序设计之基本概
- 下一篇: JavaScript+HTML+CSS