小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

數(shù)據(jù)類型與typeof

 頭號碼甲 2021-09-14

個人學習筆記,如有錯誤請指出

數(shù)據(jù)類型

基本數(shù)據(jù)類型(原始值類型)

  • number NaN/Infinity特殊
  • string 單引號/雙引號/反引號``
  • boolean true/false
  • null
  • undefined
  • symbol 創(chuàng)建唯一值
  • bigint

引用數(shù)據(jù)類型:

  • object
    • {} 普通對象
    • [] 數(shù)組對象
    • /^[+-]?(?:\d|(?:[1-9]\d+))(\.\d+)?$/ 正則對象
    • 日期對象
    • function(較為特殊,函數(shù)是一個附帶可被調(diào)用功能的常規(guī)的對象
    • ...

一共8大數(shù)據(jù)類型

更加詳細和官方的解釋參考MDN: JavaScript 數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)

注意:
javascript中,setmap是一種數(shù)據(jù)結(jié)構(gòu),本質(zhì)上還是Object類型

typeof

typeof 操作符返回一個字符串,表示未經(jīng)計算的操作數(shù)的類型

//7個基本數(shù)據(jù)類型
typeof 10
//"number"
typeof '1'
//"string"
typeof null
//"object"
typeof undefined
//"undefined"
typeof Symbol()
//"symbol"
typeof 9007199254740991n
//"bigint"
typeof true
//"boolean"
//object類型
typeof {}
//"object"
typeof []
//"object"
typeof /^$/
//"object"
typeof new Date()
//"object"

注意比較特殊的

//需要記住的特殊值
typeof NaN
//"number"
typeof function(){}
//"function"
typeof null
//"object"
typeof []//不要搞混,typeof 細分對象是不可以的
//"object"

注意三個包裝對象

所謂“包裝對象”,指的是與數(shù)值、字符串、布爾值分別相對應(yīng)的Number、String、Boolean三個原生對象。這三個原生對象可以把原始類型的值變成(包裝成)對象。

var v1 = new Number(123);
var v2 = new String('abc');
var v3 = new Boolean(true);

typeof v1 // "object"
typeof v2 // "object"
typeof v3 // "object"

v1 === 123 // false
v2 === 'abc' // false
v3 === true // false

typeof null === 'object' 原因

typeof的原理:

  • 所有的數(shù)據(jù)類型值在計算機中存儲的都是按照“二進制”存儲的
  • null -> 000000
  • 只要是對象都是以 000 開始的
  • typeof`檢測的時候,是按照計算機存儲的二進制的值來檢測的

MDN解釋:

總結(jié):

因為在javascript當中值的類型由類型標簽+實際數(shù)值表示,對象的類型標簽是0,而null指向空指針,用0x00的值來表示,所以null的類型標簽也是0,因此typeof null 返回 "object"。

NaN

NaN:not a number 不是一個有效數(shù)字,但是它屬于number數(shù)據(jù)類型的

console.log(typeof NaN); //=>"number"
console.log(NaN == NaN); //=>false
console.log(NaN === NaN); //=>false
let n = 10;

//如何檢測是NaN
if (isNaN(n)) {
    // 條件成立:證明它真的是非有效數(shù)字
}
Object.is([val1],[val2])//檢測兩個值是否相等
console.log(Object.is(NaN, NaN)); //=>true

Object.is()內(nèi)部對NaN的判斷做了特殊處理

Infinity

typeof Infinity//"number"
Infinity===Infinity//true
-Infinity===Infinity//false

symbol

簡單介紹

JS 中的 Symbol 是什么?
ECMAScript 6入門-Symbol

Symbol 可以創(chuàng)建一個獨一無二的值。


console.log(new Symbol()); //Uncaught TypeError: Symbol is not a constructor
//無法使用new Sumbol(基本數(shù)據(jù)類型)
console.log(Symbol('AA') === Symbol('AA')); //false
//每次都會創(chuàng)建一個唯一值,括號中的字符串可以看做標記,注釋,只是為了區(qū)分

let symb = Symbol('BB');
console.log(symb === symb); //true 

bigint

最大安全數(shù)與最小安全數(shù)

Number.MAX_SAFE_INTEGER//9007199254740991
Number.MIN_SAFE_INTEGER//-9007199254740991
Math.pow(2,53)//9007199254740992

超過這個數(shù)計算會出現(xiàn)錯誤

bigint解決大數(shù)問題

如果服務(wù)器存儲ID是長整型,int值非常大。當服務(wù)器將其轉(zhuǎn)化為字符串的時候,返回給客戶端就沒有問題,如果服務(wù)器以Number類型返回,那么這個返回的id在瀏覽器中和服務(wù)器中值不一樣,會發(fā)生改變,出現(xiàn)錯誤

為了解決這個問題,在es6中引入新的數(shù)據(jù)類型bigint,在數(shù)字后面加n即為bigint類型

9007199254740992123n+1n//9007199254740992124n
typeof 9007199254740992124n//"bigint"

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多