麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 語言 > 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中的數據類型之旅,希望大家喜歡。

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

圖片精選

主站蜘蛛池模板: 国产papa| 久草视频在线资源 | 操操操日日日干干干 | 成人免费福利网站 | 精品一区二区三区免费爱 | 亚洲免费视频一区 | 久久精品一区二区三区不卡牛牛 | 伊人亚洲精品 | 在线成人www免费观看视频 | 国产精品毛片无码 | 午夜影院a | 国产91免费看 | 久久男人天堂 | 精品国产一区二区三 | 日韩黄色片免费看 | 强伦女教师视频 | 天堂成人国产精品一区 | 欧美a级大胆视频 | 久久精品一二三区白丝高潮 | 黄色小视频在线免费看 | 91懂色| 黄色成人短视频 | 激情视频导航 | 七首小情歌泰剧在线播放 | 一级成人欧美一区在线观看 | 操碰网| 午夜激情视频网站 | 亚洲五码在线观看视频 | 国产一区二区三区欧美 | 久久国产亚洲精品 | 欧日一级片 | 国产毛片在线看 | 国产一国产精品一级毛片 | jizzzxxxxhd| 国产深夜福利视频在线播放 | 精品国产91久久久久久浪潮蜜月 | 久久最新免费视频 | 一级毛片播放 | 欧美亚成人 | 亚洲精品午夜国产va久久成人 | av成人一区二区 |