亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

Javascript中的數據類型之旅

2024-05-06 16:24:43
字體:
來源:轉載
供稿:網友

JavaScript 是一種弱類型或者說動態語言。這意味著你不用提前聲明變量的類型,在程序運行過程中,類型會被自動確定。這也意味著你可以使用同一個變量保存不同類型的數據。

雖然Javascript是弱類型語言,但是,它也有自己的幾種數據類型,分別是:Number、String、Boolean、Object、Udefined、Null。其中,Object屬于復雜數據類型,Object 由無序的鍵值對組成。其余幾種都屬于簡單數據類型。注意:變量類型首字母大寫,而變量值首字母是小寫的。

JavaScript不支持自定義類型,所以JavaScript中的所有值都屬于這六種類型之一。

根據ECMAScript 5.1的規范,javascript中共有六種數據類型,分別為:Undefined, Null, Boolean,Number, String、Object。前五種屬于基本類型,最后一種屬于Object類型。

最新的ECMAScript 6 又加了一種類型:Symbol (ECMAScript 6 新定義)

基本數據類型

Undefined:只有一個值,為undefined,意味著“空值(no value)”,適用于所有數據類型。

Null:只有一個值,為null,意味著“空對象(no object)”,只適用于對象類型。(literal)

Boolean:有兩個值,為true與false

Number:的值是遵循IEEE 754標準的64位浮點數的集合,沒有整型數據結構。此外還包含三個特殊的值:NaN、Infinity、-Infinity

String:值是有窮個Unicode字符的集合。必須用'或"括起來。

一、String

JavaScript的字符串類型用于表示文本數據。它是一組16位的無符號整數值的“元素”。在字符串中的每個元素占據了字符串的位置。第一個元素的索引為0,下一個是索引1,依此類推。字符串的長度是它的元素的數量

與 C 語言不同,JavaScript 中字符串是不可變的(譯注:如,JavaScript 中對字符串的操作一定返回了一個新字符串,原始字符串并沒有被改變)

Javascript中一切都是object-based

創建string,也有兩種類型

1、使用字面量方式創建的字符串,為基本類型的string //string

2、使用String()創建的字符串,為基本類型的string // string

3、使用構造函數 new String()的方式創建的字符串,為對象類型的 //string

var str1 = "javascript"; //string

var str2 = String("javascript"); //string 不推薦

var str3 = new String('javascript'); //object

object 和 string也是有區別的

s1 = "2 + 2"; // creates a string primitive

s2 = new String("2 + 2"); // creates a String object

console.log(eval(s1)); // returns the number 4

console.log(eval(s2)); // returns the string "2 + 2"

字符串對象的轉換 valueof -》 string

console.log(eval(s2.valueOf())); // returns the number 4

二、boolean

不要將原始值true false,和值為true false的Boolean對象相混淆

1、如果Boolean構造函數的參數不是一個布爾值,則該參數會被轉換成一個布爾值

2、如果參數是 0, -0, null,false, NaN, undefined, 或者空字符串 (""),生成的Boolean對象的值為false. 其他任何值,包括任何對象或者字符串"false", 都會創建一個值為true的Boolean對象

 

 
  1. var x = new Boolean(false); 
  2. if(x){ 
  3. console.log(x.valueOf(),typeof x); // false object 

上面會執行,很神奇的代碼

不要通過新建Boolean對象的方法來將一個非布爾值轉化成布爾值. 直接使用Boolean函數才是正確的

 

 
  1. var x = Boolean(expression); // 這樣用 
  2. var x = new Boolean(expression); // 而不要這樣! 
  3. 初始化的時候 
  4.  
  5. //false 
  6. var bNoParam = new Boolean(); 
  7. var bZero = new Boolean(0); 
  8. var bNull = new Boolean(null); 
  9. var bEmptyString = new Boolean(""); 
  10. var bfalse = new Boolean(false); 
  11. //true 
  12. var btrue = new Boolean(true); 
  13. var btrueString = new Boolean("true"); 
  14. var bfalseString = new Boolean("false"); 
  15. var bSuLin = new Boolean("Su Lin"); 

三、Number

根據 ECMAScript 標準,JavaScript 中只有一種數字類型:基于 IEEE 754 標準的雙精度 64 位二進制格式的值(-(253 -1) 到 253 -1)。它并沒有為整數給出一種特定的類型。除了能夠表示浮點數外,還有一些帶符號的值:+Infinity,-Infinity 和 NaN (非數值,Not-a-Number)

數字類型只有一個整數,它有兩種表示方法: 0 可表示為 -0 和 +0("0" 是 +0 的簡寫)。 在實踐中,這也幾乎沒有影響。 例如 +0 === -0 為真。 但是,你可能要注意除以0的時候:

42 / +0; // Infinity

42 / -0; // -Infinity

如果參數無法被轉換為數字,則返回 NaN。

在非構造器上下文中 (如:沒有 new 操作符),Number 能被用來執行類型轉換

isNAN 類型判斷

 

 
  1. Number.isNaN(NaN); // true 
  2. Number.isNaN(Number.NaN); // true 
  3. Number.isNaN(0 / 0) // true 
  4. // e.g. these would have been true with global isNaN() 
  5. Number.isNaN("NaN"); // false 
  6. Number.isNaN(undefined); // false 
  7. Number.isNaN({}); // false 
  8. Number.isNaN("blabla"); // false 
  9. // These all return false 
  10. Number.isNaN(true); 
  11. Number.isNaN(null); 
  12. Number.isNaN(37); 
  13. Number.isNaN("37"); 
  14. Number.isNaN("37.37"); 
  15. Number.isNaN(""); 
  16. Number.isNaN(" "); 

原型鏈繼承的關系

console.log(Number.prototype.__proto__ == Object.prototype); //true

console.log(Number.prototype.__proto__.__proto__ == Object.prototype.__proto__);//true

console.log(Object.prototype.__proto__ === null);//true

console.log(typeof Number);//function

使用 Number 轉換 Date 對象

var d = new Date("December 17, 1995 03:24:00");

console.log(Number(d));

四、Null

null 是一個 JavaScript 字面量,表示空值(null or an "empty" value),即沒有對象被呈現(no object value is present)。它是 JavaScript 原始值 之一。

null 是一個字面量 (而不是全局對象的一個屬性,undefined 是 )

console.log(null); //null

console.log(undefined);//undefined

console.log(window.null);//undefined

console.log(window.undefined);//undefined

null與undefined的區別

 

 
  1. console.log(foot);//Uncaught ReferenceError: foot is not defined 
  2. var foo; 
  3. console.log(foo);//undefined 
  4. var bar =null
  5. console.log(bar);//null 
  6. typeof null // object (bug in ECMAScript, should be null) 
  7. typeof undefined // undefined 
  8. null === undefined // false 
  9. null == undefined // true 

所以判斷null,可以判斷類型 + 值

五、Undefined

在JavaScript中,undefined這個詞有多重含義.首字母大寫的Undefined表示的是一種數據類型,小寫的undefined表示的是屬于這種數據類型的唯一的一個值.但這兩種undefined都只能存在于文檔或規范中,不能存在于JavaScript代碼中.在JavaScript代碼中,你看到的undefined最有可能是全局對象的一個屬性,該屬性的初始值是就是前面所說的原始值undefined,還有種情況就是,這個undefined是個局部變量,就像其他普通變量一樣,沒有任何特殊性,它的值不一定是undefined,但通常情況下都是的.下面我們所說的undefined,都指的是window.undefined這個屬性.

在ES3中(Firefox4之前),window.undefined就是一個普通的屬性,你完全可以把它的值改變成為任意的真值,但在ES5中((Firefox4之后),window.undefined成了一個不可寫,不可配置的數據屬性,它的值永遠是undefined.

一個未初始化的變量的值為undefined,一個沒有傳入實參的形參變量的值為undefined,如果一個函數什么都不返回,則該函數默認返回undefined.

你可以使用嚴格相等運算符來判斷一個值是否是undefined:

 

 
  1. var foo; 
  2. console.log(foo === undefined);//true 
  3. console.log(typeof foo === 'undefined');//true 
  4. console.log(window.foo === undefined);//true 
  5. console.log(bar === undefined);//Uncaught ReferenceError: bar is not defined 
  6. console.log(typeof bar === 'undefined');//true 
  7. console.log(window.bar === undefined);//true 
  8. console.log(typeof undefined == 'undefined'); //true 
  9. console.log(typeof null == 'object');//true 
  10. console.log(null == undefined);//true 
  11. console.log(null === undefined);//false 

總結

Null的值是null,表示一個空對象指針,沒有指向任何對象

Undefined的值是undefined,表示申明變量或對象的屬性卻未初始化

undefined值是派生自null的,所以對他們執行相等測試會返回true

數值、布爾值、對象和字符串值都有toString()方法。但null和undefined值沒有這個方法

多數情況下,調用toString()方法不必傳遞參數。但是,在調用數值的toString()方法時,可以傳遞一個參數:輸出數值的基數

var num = 10;

alert(num.toString()); //"10"

alert(num.toString(2)); //"1010"

alert(num.toString(8)); //"12"

alert(num.toString(10)); //"10"

alert(num.toString(16)); //"a"

在不知道要轉換的值是不是null或undefined的情況下,還可以使用轉型函數String(),這個函數能夠將任何類型的值轉換為字符串。String()函數遵循下列轉換規則:

● 如果值有toString()方法,則調用該方法(沒有參數)并返回相應的結果

● 如果值是null,則返回"null"

● 如果值是undefined,則返回"undefined"

六、Object

Javascript中一切皆Object

 

 
  1. // Objects 
  2. typeof {a:1} === 'object'
  3. // 使用Array.isArray或者Object.prototype.toString.call方法可以從基本的對象中區分出數組類型 
  4. typeof [1, 2, 4] === 'object'
  5. typeof new Date() === 'object'
  6. // 下面的容易令人迷惑,不要這樣使用! 
  7. typeof new Boolean(true) === 'object'
  8. typeof new Number(1) ==== 'object'
  9. typeof new String("abc") === 'object'
  10. // 函數 
  11. typeof function(){} === 'function'
  12. typeof Math.sin === 'function'

實例化一個空Object

var o = new Object();

var o = new Object(undefined);

var o = new Object(null);

var o = {};

原型

定義屬性為__proto__: 值 或 "__proto__": 值 時,不會創建名為__proto__屬性。如果給出的值是對象或者null,那么對象的[[Prototype]]會被設置為給出的值。(如果給出的值不是對象也不是null,那么對象的原型不會改變。)

 

 
  1. var obj1 = {}; 
  2. assert(Object.getPrototypeOf(obj1) === Object.prototype); 
  3. var obj2 = { __proto__: null }; 
  4. assert(Object.getPrototypeOf(obj2) === null); 
  5. var protoObj = {}; 
  6. var obj3 = { "__proto__": protoObj }; 
  7. assert(Object.getPrototypeOf(obj3) === protoObj); 
  8. var obj4 = { __proto__: "not an object or null" }; 
  9. assert(Object.getPrototypeOf(obj4) === Object.prototype); 
  10. assert(!obj4.hasOwnProperty("__proto__")); 

在對象字面值中,僅有一次變更原型的機會;多次變更原型,會被視為語法錯誤。

不使用冒號記法的屬性定義,不會變更對象的原型;而是和其他具有不同名字的屬性一樣是普通屬性定義。

 

 
  1. var __proto__ = "variable"
  2. var obj1 = { __proto__ }; 
  3. assert(Object.getPrototypeOf(obj1) === Object.prototype); 
  4. assert(obj1.hasOwnProperty("__proto__")); 
  5. assert(obj1.__proto__ === "variable"); 
  6. var obj2 = { __proto__() { return "hello"; } }; 
  7. assert(obj2.__proto__() === "hello"); 
  8. var obj3 = { ["__prot" + "o__"]: 17 }; 
  9. assert(obj3.__proto__ === 17); 

與JSON的區別

JSON 只允許"property": value syntax形式的屬性定義。屬性名必須用雙引號括起來。且屬性定義不允許使用簡便寫法。

JSON中,屬性的值僅允許字符串,數字,數組,true,false,或者其他JSON對象。

JSON中,不允許將值設置為函數。

Date 等對象,經JSON.parse()處理后,會變成字符串。

JSON.parse() 不會處理計算的屬性名,會當做錯誤拋出。

defineProperty

 

 
  1. Object.defineProperty() 方法直接在一個對象上定義一個新屬性,或者修改一個已經存在的屬性, 并返回這個對象 
  2. // 使用 __proto__ 
  3. Object.defineProperty(obj, "key", { 
  4. __proto__: null// 沒有繼承的屬性 
  5. value: "static" // 沒有 enumerable 
  6. // 沒有 configurable 
  7. // 沒有 writable 
  8. // 作為默認值 
  9. }); 
  10. // 顯式 
  11. Object.defineProperty(obj, "key", { 
  12. enumerable: false
  13. configurable: false
  14. writable: false
  15. value: "static" 
  16. }); 
  17. // 回收同一對象 
  18. function withValue(value) { 
  19. var d = withValue.d || ( 
  20. withValue.d = { 
  21. enumerable: false
  22. writable: false
  23. configurable: false
  24. value: null 
  25. ); 
  26. d.value = value; 
  27. return d; 
  28. // ... 和 ... 
  29. Object.defineProperty(obj, "key", withValue("static")); 
  30. // 如果 freeze 可用, 防止代碼添加 
  31. // value, get, set, enumerable, writable, configurable 
  32. // 到對象原型上 
  33. (Object.freeze||Object)(Object.prototype); 

configurable當且僅當這個屬性描述符值為 true 時,該屬性可能會改變,也可能會被從相應的對象刪除。默認為 false。

enumerabletrue 當且僅當該屬性出現在相應的對象枚舉屬性中。默認為 false。

value 與屬性相關的值??梢允侨魏斡行У?JavaScript 值(數值,對象,函數等)。默認為 undefined。

writable true 當且僅當可能用 賦值運算符 改變與屬性相關的值。默認為 false。

存取描述符同時具有以下可選鍵值:

get 一個給屬性提供 getter 的方法,如果沒有 getter 則為 undefined。方法將返回用作屬性的值。默認為 undefined。

set 一個給屬性提供 setter 的方法,如果沒有 setter 則為 undefined。該方法將收到作為唯一參數的新值分配給屬性。默認為 undefined。

ps:js中的變量定義

在JavaScript中,使用var來定義任何類型的變量,每一個變量只是用于保存數據的占位符。

var temp; //這句代碼定義了一個變量,但其類型是未知的,可以存放任何類型的值,沒有初始化的時候,test中存儲是undefined。

var temp=2; //這句代碼定義了一個變量,并直接初始化為數值型。

var temp="javascript"; // 這句代碼定義了一個變量,并直接初始化微string型,單引號和雙引號都可以,只要成對出現就行。

2、變量的作用域

在Javascript中,使用var定義的變量,其作用域是在定義該變量的方法或函數內。也就是說,使用var定義的變量是局部變量。

例:

function test()

{

var temp="Hello, Javascript!";

}

test(); //方法調用的時候創建變量并初始化,執行結束后變量被銷毀。

alert(temp); //undefined。因為變量temp已經被銷毀,所以是未定義(undefined)。

如果在定義變量時,不使用var,那么定義的變量是全局變量。

例:

 

 
  1. function test2()  
  2. {  
  3. temp2="Hello, Javascript!";  
  4. }  
  5. test2(); //調用方法時,創建變量并初始化,執行結束后變量依然存在。  
  6. alert(temp2); //Hello, Javascript! 變量值依然存在 

以上內容是小編給大家介紹的Javascript中的數據類型之旅,希望大家喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本电影亚洲天堂| 日韩在线观看免费高清| 亚洲人成亚洲人成在线观看| 欧美另类精品xxxx孕妇| 亚洲精品国产福利| 久久综合国产精品台湾中文娱乐网| 日韩午夜在线视频| 国内精品久久久久久中文字幕| 日韩小视频在线| 91亚洲va在线va天堂va国| 欧美激情免费看| 日韩在线小视频| 午夜精品久久久久久久99热| 国产精品视频26uuu| 精品欧美一区二区三区| 中文字幕精品视频| 国产又爽又黄的激情精品视频| 亚洲**2019国产| 亚洲一区第一页| 日韩精品在线电影| 亚洲亚裔videos黑人hd| 亚洲成年网站在线观看| 久久国产精品影片| 97av在线播放| 国产亚洲一区二区在线| 欧美激情免费看| 一区二区欧美久久| 亚洲美女精品成人在线视频| 日本一区二区不卡| 亚洲va久久久噜噜噜久久天堂| 午夜精品蜜臀一区二区三区免费| 色噜噜国产精品视频一区二区| 国产激情综合五月久久| 欧美激情久久久久| 国产成人激情小视频| 欧美黑人巨大精品一区二区| 97超级碰碰碰久久久| 欧美电影电视剧在线观看| 亚洲福利视频久久| 国产精品69av| 国产成+人+综合+亚洲欧美丁香花| 国产日韩精品在线观看| 精品福利樱桃av导航| 日本精品一区二区三区在线播放视频| 最近2019中文字幕一页二页| 亚洲人成网站免费播放| 欧美高清在线播放| 亚洲精品国产综合区久久久久久久| 亚洲а∨天堂久久精品9966| 亚洲美女黄色片| 国产91在线高潮白浆在线观看| 亚洲毛片在线观看| 久久成人精品视频| 国产欧美日韩丝袜精品一区| 91亚洲国产成人精品性色| 国产精品一二三在线| 久久中文字幕一区| 亚洲电影av在线| 国产欧美一区二区| 亚洲欧美视频在线| 亚洲人成绝费网站色www| 91精品免费视频| 成人精品久久av网站| 丝袜亚洲欧美日韩综合| 亚洲а∨天堂久久精品喷水| 国产91成人在在线播放| 国产一区二区三区在线免费观看| 国产成人精品免费久久久久| 97视频在线观看视频免费视频| 热久久美女精品天天吊色| 国产精品视频永久免费播放| 91香蕉嫩草神马影院在线观看| 亚洲精品一区中文| 92版电视剧仙鹤神针在线观看| 88国产精品欧美一区二区三区| 国产精品 欧美在线| 久久久久久久久久久人体| 久久久免费高清电视剧观看| 国外成人免费在线播放| 亚洲精品999| 8x拔播拔播x8国产精品| 亚洲xxx视频| 欧美丰满少妇xxxx| 91最新在线免费观看| 久久av红桃一区二区小说| 久久在线视频在线| 欧美性受xxx| 亚洲视频在线免费看| 亚洲二区中文字幕| 福利视频第一区| 国产免费一区二区三区在线能观看| 91亚洲va在线va天堂va国| 久久国产精品久久久久| 热久久免费视频精品| 亚洲欧美精品一区二区| 欧美日韩激情美女| 久久影院中文字幕| 国产综合香蕉五月婷在线| 精品日韩美女的视频高清| 久久久久久久香蕉网| 色综合伊人色综合网| 色七七影院综合| 欧美一级高清免费播放| 97在线视频精品| 精品无码久久久久久国产| 中文字幕精品久久久久| 国产精品精品久久久久久| 国产精品精品视频一区二区三区| 久久中文字幕国产| 亚洲小视频在线观看| 精品日韩视频在线观看| 国产在线精品成人一区二区三区| 日韩美女视频免费在线观看| 不卡av在线网站| 国产精品亚洲综合天堂夜夜| 久久综合伊人77777尤物| 这里只有视频精品| 欧美丝袜一区二区| 欧美成人黑人xx视频免费观看| 久久精品国产69国产精品亚洲| 亚洲色在线视频| 国产www精品| 国产精品亚洲片夜色在线| 欧美精品在线第一页| 一个色综合导航| 久久九九精品99国产精品| 亚洲四色影视在线观看| 2019中文在线观看| 最近2019免费中文字幕视频三| 亚洲bt欧美bt日本bt| 全亚洲最色的网站在线观看| 国产视频久久久| 亚洲嫩模很污视频| 久久久视频精品| 亚洲香蕉伊综合在人在线视看| 亚洲欧美另类自拍| 精品亚洲国产成av人片传媒| 国产精品欧美一区二区| 成人精品久久av网站| 欧美日韩国产中字| 亚洲国产成人精品女人久久久| 日韩视频免费观看| 亚洲精品永久免费精品| 色香阁99久久精品久久久| 91精品国产色综合久久不卡98| 国产精品九九九| 高清日韩电视剧大全免费播放在线观看| 国产精品视频999| 亚洲自拍中文字幕| 久久成人国产精品| 亚洲xxxxx| 亚洲精品大尺度| 91av中文字幕| 亚洲美女av电影| 国产午夜精品免费一区二区三区| 日韩在线资源网| 51精品国产黑色丝袜高跟鞋| 日产精品久久久一区二区福利| 国产狼人综合免费视频| 中文字幕日韩有码| 久久成人一区二区| 精品久久久久久久久久久久| 国模精品系列视频| 亚洲欧美综合图区|