成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript基礎(chǔ)(一) 數(shù)據(jù)類型

heartFollower / 2095人閱讀

摘要:類型是第二個(gè)只有一個(gè)值的數(shù)據(jù)類型這個(gè)特殊的值是。有時(shí)會(huì)被當(dāng)作一種對(duì)象類型,但是這其實(shí)只是語(yǔ)言本身的一個(gè),即對(duì)執(zhí)行時(shí)會(huì)返回字符串。初始化對(duì)象解除循環(huán)引用將閉包引用的外部函數(shù)中活動(dòng)對(duì)象清除類型是常用的一種類型,只有兩個(gè)字面值和。

動(dòng)態(tài)類型

JavaScript 是一種弱類型或者說(shuō)動(dòng)態(tài)語(yǔ)言。這意味著你不用提前聲明變量的類型,在程序運(yùn)行過(guò)程中,類型會(huì)被自動(dòng)確定。

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

最新的 ECMAScript 標(biāo)準(zhǔn)定義了 7 種數(shù)據(jù)類型:

6 種 原始類型:

Boolean

Null

Undefined

Number

String

Symbol (ECMAScript 6 新定義)

和 Object

typeof 檢測(cè)數(shù)據(jù)類型

typeof用來(lái)檢測(cè)給定變量的數(shù)據(jù)類型,返回下列某個(gè)字符串

"boolean” --- 變量是布爾值(true/false)

"undefined" --- 變量未定義

"string" --- 變量是字符串

"number" --- 變量是數(shù)值

"function" --- 變量是函數(shù)

"object" --- 變量是對(duì)象或null

"symbol" --- 變量是Symbol

有這樣一道題目,考察 typeof 返回值類型。

typeof(typeof(new Date()))   //string

但是在實(shí)際項(xiàng)目中,typeof 也只是用來(lái)判斷變量是undefinedfunction。因?yàn)楹芏囝愋筒荒芫_的判斷出來(lái),例如:

Value function typeof
"foo" String string
new String("foo") String object
1.2 Number number
new Number(1.2) Number object
true Boolean boolean
new Boolean(true) Boolean object
new Date() Date object
new Error() Error object
[1,2,3] Array object
new Array(1, 2, 3) Array object
new Function("") Function function
/abc/g RegExp object
new RegExp("meow") RegExp object
{} Object object
new Object() Object object
注意
typeof /s/ ===function; // Chrome 1-12 , 不符合 ECMAScript 5.1
typeof /s/ === object; // Firefox 5+ , 符合 ECMAScript 5.1

由上得出結(jié)論,當(dāng)使用檢測(cè)結(jié)果是objectfunction時(shí),我們并不能看出實(shí)際的數(shù)據(jù)類型。

推薦使用 Object.prototype.toString(),結(jié)合call去實(shí)現(xiàn)對(duì)變量類型的精準(zhǔn)判斷。

Object.prototype.toString.call(null);      //”[object Null]”
Object.prototype.toString.call(undefined); //”[object Undefined]”
Object.prototype.toString.call(“abc”);     //”[object String]”
Object.prototype.toString.call(123);       //”[object Number]”
Object.prototype.toString.call(true);      //”[object Boolean]”

簡(jiǎn)單封裝如下:

function _typeof(obj){
  
   if(typeof obj == object || typeof obj == function){
    var type =Object.prototype.toString.call(obj).split("")[1].toLowerCase();
    return type.match(/[a-z]/g).join("");  //正則去除字符串的]
  }
  
  return typeof obj; 
  
}

上面代碼在標(biāo)準(zhǔn)瀏覽器中可以完全兼容,但是IE6(雖然現(xiàn)在不必兼容,也要了解下)中,卻會(huì)出現(xiàn)以下問(wèn)題:

_typeof(null);        //object
_typeof(undefined);   //object

原因在于IE6下

Object.prototype.toString.call(undefined);  //”[object Object]”
Object.prototype.toString.call(null);       //”[object Object]”

所以要先添加判斷,使用String()對(duì)象將 undefined,null轉(zhuǎn)為字符串。代碼如下:

   function _typeof (obj){
    
    //注意到這里是 == 而不是 === ,
    //undefined 值是派生自 null 值的,所以null == undefined 返回true 
    if(obj == null){
        return String(obj)
    }
      
    if(typeof obj == "object"; || typeof obj == "function"){
      var type =Object.prototype.toString.call(obj).split(" ")[1].toLowerCase();
      return type.substring(0,type.length-1); 
    }
    
    return typeof obj; 
    
    }

String()函數(shù)遵循下列轉(zhuǎn)換規(guī)則:
如果值有 toString()方法,則調(diào)用該方法(沒(méi)有參數(shù))并返回相應(yīng)的結(jié)果;
如果值是 null,則返回"null";
如果值是 undefined,則返回"undefined"

這樣對(duì) typeof 的擴(kuò)展就封裝好了。代碼還有優(yōu)化空間,這里不再繼續(xù)。

Jquery已經(jīng)實(shí)現(xiàn)了類型檢測(cè)的封裝,jquery.type()的內(nèi)部實(shí)現(xiàn)如下:

//實(shí)例對(duì)象是能直接使用原型鏈上的方法的
var class2type = {};
var toString = class2type.toString;

jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
  class2type[ "[object " + name + "]" ] = name.toLowerCase();
});

$.type = function( obj ) {
  //如果是null或者undefined,直接轉(zhuǎn)成String返回
  //注意到這里是==而不是===,
  //undefined 值是派生自 null 值的,所以null == undefined 返回true 
  if ( obj == null ) {
    return String( obj );
  }
  //當(dāng)typeof 返回 object或function, 進(jìn)入core_toString 
  return typeof obj === "object" || typeof obj === "function" ?
    class2type[ core_toString.call(obj) ] || "object":
    typeof obj;
}
Undefined

Undefined 類型只有一個(gè)值,即特殊的 undefined。在使用 var 聲明變量但未對(duì)其加以初始化時(shí),這個(gè)變量的值就是 undefined,例如:

var foo;
alert(foo == undefined);  //true

undefined表示"缺少值",就是此處應(yīng)該有一個(gè)值,但是還沒(méi)有定義。
典型用法是:

變量被聲明了,但沒(méi)有賦值時(shí),就等于 undefined。

調(diào)用函數(shù)時(shí),應(yīng)該提供的參數(shù)沒(méi)有提供,該參數(shù)等于 undefined。

對(duì)象沒(méi)有賦值的屬性,該屬性的值為 undefined。

函數(shù)沒(méi)有返回值時(shí),默認(rèn)返回 undefined。

var name;
alert(name) // undefined

function f(x){console.log(x)}
f() // undefined

var  o = new Object();
alert(o.p) // undefined

var x = f();
alert(x) // undefined
Null

Null 類型是第二個(gè)只有一個(gè)值的數(shù)據(jù)類型,這個(gè)特殊的值是 null。
如果定義的變量準(zhǔn)備在將來(lái)用于保存對(duì)象,那么最好將該變量初始化為 null。

null 有時(shí)會(huì)被當(dāng)作一種對(duì)象類型,但是這其實(shí)只是語(yǔ)言本身的一個(gè)bug,即對(duì) null 執(zhí)行 typeof null 時(shí)會(huì)返回字符串"object"。

原理是這樣的,不同的對(duì)象在底層都表示為二進(jìn)制,在JavaScript中二進(jìn)制前三位都為0的話會(huì)被判斷為object類型,null的二進(jìn)制表示是全0,自然前三位也是0,所以執(zhí)行 typeof 時(shí)會(huì)返回“object”?!赌悴恢赖腏avaScript》

使用null的情況:

1.DOM,試圖獲取一個(gè)不存在的元素返回一個(gè)null值,而不是undefined。
2.初始化一個(gè)對(duì)象的值,一般設(shè)為null。
3.通過(guò)分配null值,有效地清除引用,并假設(shè)對(duì)象沒(méi)有引用其他代碼,指定垃圾收集,確保回收內(nèi)存。

var table = document.getElementById("table"); 
console.log(table);  // null

var obj = null; //初始化對(duì)象

window.onload = function(){
    var el = document.getElementById("id");
    var id = el.id; //解除循環(huán)引用
    el.onclick = function(){
        alert(id); 
    }
    el = null; // 將閉包引用的外部函數(shù)中活動(dòng)對(duì)象清除
}
Boolean

Boolean 類型是常用的一種類型,只有兩個(gè)字面值:truefalse。

注意:字面值區(qū)分大小寫,True 和 False 不是 Boolean 值。

經(jīng)常遇到就是其他數(shù)據(jù)類型轉(zhuǎn)為boolean的問(wèn)題,只要遵循一個(gè)原則:

當(dāng)值為""(空字符串)、0、NaN、nullundefined 時(shí),都轉(zhuǎn)為false,其他情況都為true

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/79992.html

相關(guān)文章

  • 基礎(chǔ)鞏固:JavaScript基礎(chǔ)總結(jié)(基本概念篇)

    摘要:基礎(chǔ)鞏固基礎(chǔ)總結(jié)使用已經(jīng)好幾年了,由于工作主要是做服務(wù)端開發(fā),在工作中逐漸發(fā)現(xiàn)的使用范圍原來(lái)越廣泛。這里要注意,務(wù)必將基礎(chǔ)部分掌握牢靠,磨刀不誤砍柴功,只有將基礎(chǔ)部分掌握并建立起系統(tǒng)的知識(shí)體系,在后面學(xué)習(xí)衍生的其他模式才能游刃有余。 基礎(chǔ)鞏固:JavaScript基礎(chǔ)總結(jié) 使用JavaScript已經(jīng)好幾年了,由于工作主要是做服務(wù)端開發(fā),在工作中逐漸發(fā)現(xiàn)JavaScript的使用范圍原...

    YuboonaZhang 評(píng)論0 收藏0
  • 前端基礎(chǔ)進(jìn)階():內(nèi)存空間詳細(xì)圖解

    摘要:一棧數(shù)據(jù)結(jié)構(gòu)與不同,中并沒(méi)有嚴(yán)格意義上區(qū)分棧內(nèi)存與堆內(nèi)存。引用數(shù)據(jù)類型的值是保存在堆內(nèi)存中的對(duì)象。不允許直接訪問(wèn)堆內(nèi)存中的位置,因此我們不能直接操作對(duì)象的堆內(nèi)存空間。為了更好的搞懂變量對(duì)象與堆內(nèi)存,我們可以結(jié)合以下例子與圖解進(jìn)行理解。 showImg(https://segmentfault.com/img/remote/1460000009784102?w=1240&h=683); ...

    _Suqin 評(píng)論0 收藏0
  • task0002()- JavaScript數(shù)據(jù)類型及語(yǔ)言基礎(chǔ)

    摘要:不過(guò)讓流行起來(lái)的原因應(yīng)該是是目前所有主流瀏覽器上唯一支持的腳本語(yǔ)言。經(jīng)過(guò)測(cè)試,數(shù)字字符串布爾日期可以直接賦值,修改不會(huì)產(chǎn)生影響。再考慮對(duì)象類型為或者的情況。對(duì)于結(jié)果聲明其類型。判斷對(duì)象的類型是還是,結(jié)果類型更改。 轉(zhuǎn)載自我的個(gè)人博客 歡迎大家批評(píng)指正 1. 第一個(gè)頁(yè)面交互 這里最需要學(xué)習(xí)的老師的代碼中,每一部分功能都由函數(shù)控制,沒(méi)有創(chuàng)建一個(gè)全部變量。且最后有一個(gè)函數(shù)來(lái)控制執(zhí)行代碼...

    elarity 評(píng)論0 收藏0
  • JavaScript學(xué)習(xí)總結(jié)(基礎(chǔ)部分

    摘要:前綴規(guī)范每個(gè)局部變量都需要有一個(gè)類型前綴,按照類型可以分為表示字符串。例如,表示以上未涉及到的其他對(duì)象,例如,表示全局變量,例如,是一種區(qū)分大小寫的語(yǔ)言。布爾值與字符串相加將布爾值強(qiáng)制轉(zhuǎn)換為字符串。 基本概念 javascript是一門解釋型的語(yǔ)言,瀏覽器充當(dāng)解釋器。js執(zhí)行時(shí),在同一個(gè)作用域內(nèi)是先解釋再執(zhí)行。解釋的時(shí)候會(huì)編譯function和var這兩個(gè)關(guān)鍵詞定義的變量,編譯完成后從...

    AlanKeene 評(píng)論0 收藏0
  • javascript 基礎(chǔ)類型轉(zhuǎn)換

    摘要:類型轉(zhuǎn)換和表示一個(gè)空對(duì)象。如果有其他類型想轉(zhuǎn)換為或者類型,直接賦值就可以了。都能隱式的把數(shù)據(jù)類型轉(zhuǎn)為類型。。。時(shí)間時(shí)間二數(shù)字類型轉(zhuǎn)換為字符串默認(rèn)是進(jìn)制是一個(gè)對(duì)象類型,所以其他類型轉(zhuǎn)化為通常都是。 前言 javaScript是一門可以自由進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換的編程語(yǔ)言,類型轉(zhuǎn)換是javaScript很重要的特色(坑點(diǎn)很多!!!),大家想以后寫出更多嚴(yán)謹(jǐn)?shù)拇a(少出一些莫名其妙的Bug),還是...

    timger 評(píng)論0 收藏0
  • JavaScript基礎(chǔ)數(shù)據(jù)類型

    摘要:原始數(shù)據(jù)類型和原始數(shù)據(jù)類型實(shí)在太簡(jiǎn)單,所以只簡(jiǎn)單劃幾個(gè)重點(diǎn)原始數(shù)據(jù)類型不可改變?cè)紨?shù)據(jù)類型一個(gè)非常重要的特征就是不可改變。引用數(shù)據(jù)類型這里的不是狹義的,包含的預(yù)定義引用類型,對(duì),這些都是引用數(shù)據(jù)類型。 JavaScript是腳本語(yǔ)言 計(jì)算機(jī)語(yǔ)言可以分為三類,機(jī)器語(yǔ)言、匯編語(yǔ)言、高級(jí)語(yǔ)言。高級(jí)語(yǔ)言又可以簡(jiǎn)單分為解釋類和編譯類。這個(gè)知道就夠了。 機(jī)器語(yǔ)言: 計(jì)算機(jī)所能識(shí)別的二進(jìn)制語(yǔ)言,一般...

    pinecone 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

heartFollower

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<