js深造

基本數(shù)據(jù)類型 String、Number、Bool、undefined和null

引用數(shù)據(jù)類型 Object(Array,Function,RegExp等)

typeof   123   //number

typeof   'abc'  //string

typeof    true       //boolean

typeof    undefined   //bndefined

typeof    null        //object

typeof    { }           //object

typeof    [ ]           //object

typeof    console.log      //function

null類型進行typeof操作符后,結(jié)果是object,原因在于,null類型被當(dāng)做一個空對象引用。

Null類型只有一個值null

Undefined類型只有一個只undefined

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

  1. typeof a 檢測基本數(shù)據(jù)類型:String , Number , Bool, Undefined

注:null的意義是 空對象指針,采用typeof檢測會返回 object。

  1. a Instanceof Array 檢測引用類型,但是僅能判斷是否是對象的實例,并不能準(zhǔn)確判斷究竟是哪種數(shù)據(jù)類型。

  2. Object.prototype.toString.call(a) 準(zhǔn)備判斷傳入?yún)?shù)的數(shù)據(jù)類型

null 與 undefined 的區(qū)別

Null:空對象指針,定義一個將來 用于 保存對象 的變量,最好將該變量初始化為 null.

例如 var o = null; 說明o這個變量是要用來保存對象類型的數(shù)據(jù)的,執(zhí)行typeof o會返回’object’,那么只要檢查null的值就可以判斷出該變量是否已經(jīng)保存了一個對象的引用。在實際開發(fā)工作中,經(jīng)常用到

例如:if ( goods != null ) { // 對goods對象執(zhí)行相應(yīng)操作 }

Undefined : 使用var聲明一個變量但未初始化其值,該變量的值默認(rèn)取得undefined,使用typeof檢測聲明但未初始化的變量,返回undefined

例如 var a; console.log( typeof a ) // undefined

區(qū)別和聯(lián)系:

undefined值派生自null值,因此使用全等操作 undefined == null,返回true;

二者用途不同,不建議將一個變量顯式的設(shè)置為undefined,比如var a = undefined,聲明但未初始化默認(rèn)會賦值為undefined;但對于null,只要意在保存對象的變量還沒有真正保存為對象,就應(yīng)該明確的讓該變量保存為null值,這體現(xiàn)了null作為空對象指針的意義,且利于區(qū)分undefined和null。

執(zhí)行undefined === null 返回false,全等’===’操作符的判斷,基于typeof檢測到的數(shù)據(jù)類型,而typeof undefined返回undefined,typeof null返回object。

number 有int+float

1.記住 float 浮點的運算不是精確的

2.number 里面有一個特殊的值 NaN 表示一個不是數(shù)字的number類型

eg var m=parseInt("a");

因為NaN表示值不是數(shù)字類型 。所以兩個 NaN==NaN 的值為false

任何數(shù)字和NaN做運算的值都等于NaN, NaN的值不是數(shù)字,運算不了。

Numer的小數(shù)運算精度問題 參考 https://www.cnblogs.com/ranyonsue/p/11378200.html

eg 0.1+0.2===0.3 false

原因:因為計算值是進行二進制計算 ,通常小數(shù)轉(zhuǎn)成2進制形成無限循環(huán)的二進制小數(shù),計算機只能根據(jù)float 最大精度進去截取,所以算出來是有差別的(無限循環(huán)?? 整數(shù)部分轉(zhuǎn)二進制 除2 直到商為0逆向取余 小數(shù)部分轉(zhuǎn)二進制 乘以2 直到小數(shù)位為0 順向取整)

解決辦法:

1 .tofixed()指定精度

2.
var num1 = 0.1; 
var num2 = 0.2;
var c=0.1+0.2;//0.30000000000000004
var m = Math.pow(10, 1); //10的1次冪
//原理 ,先轉(zhuǎn)成計算機可以計算的數(shù)字,比如整數(shù)。在進行元素,之后還原即可 
//此例子是先*10 在 除以10

js Number 結(jié)果相關(guān)的類

  Math.abs(-1);//Math 類
  window.parseInt("1");
  window.parseFloat(0.2222);
//上面兩個Numer上 也有這個方法 Number.parseInt
  window.isNaN("xxxx");//true  里面 的值會轉(zhuǎn)成數(shù)字
  Number.IsNaN(Number.NaN);//里面 的值不會進行數(shù)字轉(zhuǎn)換 用來修復(fù)NaN!=NaN 的問題,判斷一個數(shù)字是否是NaN值 個人認(rèn)為

js Nubmer 的一些技巧,提示

1.轉(zhuǎn)成成整數(shù) 1111.1111^0 這是一個位運算 具體是去掉小數(shù)位 和Math.floor一樣的效果 裝波利器,我也不知道是在哪里看到 的

其他數(shù)據(jù)類型是怎么轉(zhuǎn)為number的方法 )

數(shù)字類型轉(zhuǎn)換為number返回原值;
布爾類型true轉(zhuǎn)為1,false轉(zhuǎn)為0;
null轉(zhuǎn)為0;undefined轉(zhuǎn)為NaN;
如果只有數(shù)值的字符串則返回該數(shù)字,空返回0 ,除此之外返回NaN;
對象\數(shù)組調(diào)用toString()方法后得到的值進行轉(zhuǎn)換;
tip
當(dāng) 使用+運算的時候。另外一個值是字符串的時候,會把數(shù)字轉(zhuǎn)成字符串 進行 字符串相加

1+true; //2
1+"true";//"1true"
1+{a:1};//"1[object Object]"
var a={b:1,toString:function(){return this.b+2}}; 這相當(dāng)于覆蓋了Object對象的toString 的方法
var m=a+2;//5
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、標(biāo)識符 標(biāo)識符是指變量、函數(shù)、屬性的名字,或函數(shù)的參數(shù)。 格式規(guī)則: 第一個字符必須是一個字母、下劃線(_)或...
    風(fēng)中丶凌亂閱讀 1,746評論 0 0
  • 第一章: JS簡介 從當(dāng)初簡單的語言,變成了現(xiàn)在能夠處理復(fù)雜計算和交互,擁有閉包、匿名函數(shù), 甚至元編程等...
    LaBaby_閱讀 1,751評論 0 6
  • 有人說過,很多彎路到最后都成了直路,所有的坑到最后也都成了坦途;所謂的直路和坦途并不是擺在眼前的,都是不斷的的...
    老衲法號一眉道人閱讀 1,452評論 0 4
  • 第一章 前端三大語言:HTML(專門編寫網(wǎng)頁內(nèi)容)、CSS(編寫網(wǎng)頁樣式)、JS(專門編寫網(wǎng)頁交互行為) 能簡寫盡...
    fastwe閱讀 1,191評論 0 0
  • 第3章 基本概念 3.1 語法 3.2 關(guān)鍵字和保留字 3.3 變量 3.4 數(shù)據(jù)類型 5種簡單數(shù)據(jù)類型:Unde...
    RickCole閱讀 5,489評論 0 21

友情鏈接更多精彩內(nèi)容