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