亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

溫故js系列(1)-基本數(shù)據(jù)類型和引用數(shù)據(jù)類型判斷&存儲訪問&類型轉(zhuǎn)換

jone5679 / 1594人閱讀

摘要:引用數(shù)據(jù)類型引用數(shù)據(jù)類型值指保存在堆內(nèi)存中的對象。訪問方式是按引用訪問。數(shù)據(jù)類型檢測操作符是檢測基本類型的最佳工具。未定義布爾值字符串?dāng)?shù)值對象或函數(shù)用于檢測引用類型,可以檢測到它是什么類型的實(shí)例。

前端學(xué)習(xí):教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總

歡迎提issues斧正:數(shù)據(jù)類型

回味,無窮!

數(shù)據(jù)類型定義 數(shù)據(jù)類型分類

基本數(shù)據(jù)類型:String,boolean,Number,Symbol(ES6新增),Undefined, Null
引用數(shù)據(jù)類型:Object
基本數(shù)據(jù)類型中有兩個(gè)為特殊數(shù)據(jù)類型: null, undefined
js的常見內(nèi)置對象:Date,Array,Math,Number,Boolean,String,Array,RegExp,Function...

數(shù)據(jù)類型訪問&&復(fù)制

基本數(shù)據(jù)類型:基本數(shù)據(jù)類型值指保存在棧內(nèi)存中的簡單數(shù)據(jù)段。訪問方式是按值訪問。

var a = 1;

操作的是變量實(shí)際保存的值。

a = 2;

基本類型變量的復(fù)制:從一個(gè)變量向一個(gè)變量復(fù)制時(shí),會在棧中創(chuàng)建一個(gè)新值,然后把值復(fù)制到為新變量分配的位置上。

var b = a;

b = 2;

引用數(shù)據(jù)類型:引用數(shù)據(jù)類型值指保存在堆內(nèi)存中的對象。也就是,變量中保存的實(shí)際上的只是一個(gè)指針,這個(gè)指針指向內(nèi)存中的另一個(gè)位置,該位置保存著對象。訪問方式是按引用訪問。

var a = new Object();

當(dāng)操作時(shí),需要先從棧中讀取內(nèi)存地址,然后再延指針找到保存在堆內(nèi)存中的值再操作。

a.name = "xz";

引用類型變量的復(fù)制:復(fù)制的是存儲在棧中的指針,將指針復(fù)制到棧中未新變量分配的空間中,而這個(gè)指針副本和原指針指向存儲在堆中的同一個(gè)對象;復(fù)制操作結(jié)束后,兩個(gè)變量實(shí)際上將引用同一個(gè)對象。因此,在使用時(shí),改變其中的一個(gè)變量的值,將影響另一個(gè)變量。

var b = a;

b.sex = "boy";

漏畫了,差一條指針。b的引用指針也指向object{sex:"boy"}

b.sex;  //"boy"   a.name; //"boy"
堆&棧

兩者都是存放臨時(shí)數(shù)據(jù)的地方。
棧是先進(jìn)后出的,就像一個(gè)桶,后進(jìn)去的先出來,它下面本來有的東西要等其他出來之后才能出來。
堆是在程序運(yùn)行時(shí),而不是在程序編譯時(shí),申請某個(gè)大小的內(nèi)存空間。即動態(tài)分配內(nèi)存,對其訪問和對一般內(nèi)存的訪問沒有區(qū)別。對于堆,我們可以隨心所欲的進(jìn)行增加變量和刪除變量,不用遵循次序。
棧區(qū)(stack) 由編譯器自動分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。
堆區(qū)(heap) 一般由程序員分配釋放,若程序員不釋放,程序結(jié)束時(shí)可能由OS回收。
堆(數(shù)據(jù)結(jié)構(gòu)):堆可以被看成是一棵樹,如:堆排序;
棧(數(shù)據(jù)結(jié)構(gòu)):一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu)。

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

typeof操作符是檢測基本類型的最佳工具。

"undefined" — 未定義
"boolean"   — 布爾值
"string"    — 字符串
"number"    — 數(shù)值
"object"    — 對象或null
"function"  — 函數(shù)
Instanceof

instanceof用于檢測引用類型,可以檢測到它是什么類型的實(shí)例。
instanceof 檢測一個(gè)對象A是不是另一個(gè)對象B的實(shí)例的原理是:查看對象B的prototype指向的對象是否在對象A的[[prototype]]鏈上。如果在,則返回true,如果不在則返回false。不過有一個(gè)特殊的情況,當(dāng)對象B的prototype為null將會報(bào)錯(cuò)(類似于空指針異常)。

var sXzaver = new String("Xzavier"); 
console.log(sXzaver instanceof String);   //  "true"
var aXzaver = [1,2,3]; 
console.log(aXzaver instanceof Array);   //  "true"
檢測數(shù)組在ECMA Script5中定義了一個(gè)新方法Array.isArray()
Constructor

constructor屬性返回對創(chuàng)建此對象的數(shù)組函數(shù)的引用??梢杂糜跈z測自定義類型。

"xz".constructor == String // true
(123).constructor == Number // true
(true).constructor == Boolean // true
[1,2].constructor == Array // true
({name:"xz"}).constructor == Object // true
(function(){}).constructor == Function // true
(new Date()).constructor == Date // true
(Symbol()).constructor == Symbol // true
(/xz/).constructor == RegExp // true

constructor不適用于null和undefined。除了這些原生的,constructor還可驗(yàn)證自定義類型。

function Xzavier(){}
var xz = new Xzavier();
xz.constructor == Xzavier;  // true 
Object.prototype.toString.call(obj)

推薦使用:Object.prototype.toString.call(obj)

原理:調(diào)用從Object繼承來的原始的toString()方法

Object.prototype.toString.call("xz"); //"[object String]"
Object.prototype.toString.call(123);  //"[object Number]"
Object.prototype.toString.call(true); //"[object Boolean]"
Object.prototype.toString.call([1,2]); //"[object Array]"
Object.prototype.toString.call({name:"xz"}); //"[object Object]"
Object.prototype.toString.call(function(){}); //"[object Function]"
Object.prototype.toString.call(null); //"[object Null]"
Object.prototype.toString.call(undefined); //"[object Undefined]"
Object.prototype.toString.call(); //"[object Undefined]"
Object.prototype.toString.call(new Date()); //"[object Date]"
Object.prototype.toString.call(/xz/);  //"[object RegExp]"
Object.prototype.toString.call(Symbol()); //"[object Symbol]"

var obj = {name:"Xzavier", age:23};
var a = [1,2,3];

function isType(obj) {
    return Object.prototype.toString.call(obj).slice(8, -1);
}
isType(obj);  // "Object" 
isType(a)  // "Array"  
數(shù)據(jù)類型轉(zhuǎn)換 隱式轉(zhuǎn)換
undefined == null;  // true   
1 == true;  // true  
2 == true;  // false  
0 == false;  // true
0 == "";  // true   
NaN == NaN;  // false  NaN不等于任何值
[] == false;  // true  
[] == ![];  // true
"6" - "3"  // 3
1234 + "abcd" // "1234abcd"

1.undefined與null相等,但不恒等(===)
2.一個(gè)是number一個(gè)是string時(shí),會嘗試將string轉(zhuǎn)換為number
3.隱式轉(zhuǎn)換將boolean轉(zhuǎn)換為number,0或1
4.隱式轉(zhuǎn)換將Object轉(zhuǎn)換成number或string,取決于另外一個(gè)對比量的類型
5.對于0、空字符串的判斷,建議使用 “===” 。
6.“==”會對不同類型值進(jìn)行類型轉(zhuǎn)換再判斷,“===”則不會。它會先判斷兩邊的值類型,類型不匹配時(shí)直接為false。

顯示轉(zhuǎn)換

顯示轉(zhuǎn)換一般指使用Number、String和Boolean三個(gè)構(gòu)造函數(shù),手動將各種類型的值,轉(zhuǎn)換成數(shù)字、字符串或者布爾值。

Number:
Number("1234") // 1234
Number("1234abcd") // NaN
Number("") // 0
Number(true) // 1
Number(null) // 0
Number(undefined) // NaN
String:
String(1234)  // "1234"
String("abcd")  // "abcd"
String(true)  // "true"
String(undefined) // "undefined"
String(null)  // "null"
Boolean:
Boolean(0)  // false
Boolean(undefined)  // false
Boolean(null)  // false
Boolean(NaN)  // false
Boolean("")  // false

使用總,!!相當(dāng)于Boolean:

!!"foo";   // true
!!"";      // false
!!"0";     // true
!!"1";     // true
!!"-1"     // true
!!{};      // true
!!true;    // true

Number、String、Boolean轉(zhuǎn)換對象時(shí)主要使用了對象內(nèi)部的valueOf和toString方法進(jìn)行轉(zhuǎn)換。

Number轉(zhuǎn)換對象:

1.先調(diào)用對象自身的valueOf方法。如果返回原始類型的值,則直接對該值使用Number函數(shù),返回結(jié)果。
2.如果valueOf返回的還是對象,繼續(xù)調(diào)用對象自身的toString方法。如果toString返回原始類型的值,則對該值使用Number函數(shù),返回結(jié)果。
3.如果toString返回的還是對象,報(bào)錯(cuò)。

Number([1]); //1
轉(zhuǎn)換演變:
[1].valueOf(); // [1];
[1].toString(); // "1";
Number("1"); //1
String轉(zhuǎn)換對象

1.先調(diào)用對象自身的toString方法。如果返回原始類型的值,則對該值使用String函數(shù),返回結(jié)果。
2.如果toString返回的是對象,繼續(xù)調(diào)用valueOf方法。如果valueOf返回原始類型的值,則對該值使用String函數(shù),返回結(jié)果。
3.如果valueOf返回的還是對象,報(bào)錯(cuò)。

String([1,2]) //"1,2"
轉(zhuǎn)化演變:
[1,2].toString();  //"1,2"
String("1,2");  //"1,2"
Boolean轉(zhuǎn)換對象

Boolean轉(zhuǎn)換對象很特別,除了以下六個(gè)值轉(zhuǎn)換為false,其他都為true

undefined  null  false  0(包括+0和-0)  NaN  空字符串("")
Boolean(undefined)   //false
Boolean(null)        //false
Boolean(false)       //false
Boolean(0)           //false
Boolean(NaN)         //false
Boolean("")          //false

Boolean([])          //true
Boolean({})          //true
Boolean(new Date())  //true

寫寫博客打打球...要代碼,要籃球,更要生活。。。

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/79870.html

相關(guān)文章

  • 溫故js系列(9)-相等==&嚴(yán)格相等===&代碼里的那些判斷

    摘要:業(yè)務(wù)越復(fù)雜,邏輯就越復(fù)雜,判斷就越多比較判斷比較判斷是比較兩個(gè)值,返回一個(gè)布爾值,表示是否滿足比較條件。對于非布爾值的數(shù)據(jù),取反運(yùn)算符會自動將其轉(zhuǎn)為布爾值。 前端學(xué)習(xí):教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:========== JavaScript-判斷 代碼中,多多少少會有判斷語句。業(yè)務(wù)越復(fù)雜,邏輯就越...

    libin19890520 評論0 收藏0
  • 溫故js系列18)-對象&對象使用

    摘要:對象創(chuàng)建字面量方式構(gòu)造函數(shù)方式也可以這樣不過這樣的話,為何不選擇字面量方式字面量方式和方式的寫法是等價(jià)的,返回的結(jié)果是同種類的對象。構(gòu)造函數(shù)產(chǎn)生實(shí)例時(shí),實(shí)例通過其對應(yīng)原型對象的訪問對應(yīng)的構(gòu)造函數(shù)對象。 前端學(xué)習(xí):教程&模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試資源匯總 歡迎提issues斧正:對象&對象使用 Object對象 在 JavaScript 中,對...

    keke 評論0 收藏0
  • 溫故js系列12)-ajax&&優(yōu)缺點(diǎn)&&node后端

    摘要:接收響應(yīng)當(dāng)請求發(fā)送到服務(wù)器端,收到響應(yīng)后,響應(yīng)的數(shù)據(jù)會自動填充對象的屬性。一般而已狀態(tài)代碼為作為成功的標(biāo)志。必要時(shí),可以將查詢字符串參數(shù)追加到的末尾,以便提交給服務(wù)器。后端實(shí)現(xiàn)可以自學(xué)一點(diǎn)后端知識,便于學(xué)習(xí)。 前端學(xué)習(xí):教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:Ajax JavaScript-Ajax&&no...

    LiangJ 評論0 收藏0
  • 溫故js系列14)-閉包&垃圾回收&內(nèi)存泄露&閉包應(yīng)用&作用域鏈&

    摘要:該對象包含了函數(shù)的所有局部變量命名參數(shù)參數(shù)集合以及,然后此對象會被推入作用域鏈的前端。如果整個(gè)作用域鏈上都無法找到,則返回。此時(shí)的作用域鏈包含了兩個(gè)對象的活動對象和對象。 前端學(xué)習(xí):教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:閉包 JavaScript-閉包 閉包(closure)是一個(gè)讓人又愛又恨的somet...

    Amio 評論0 收藏0
  • 溫故js系列16)-數(shù)組&數(shù)組方法使用詳解

    摘要:創(chuàng)建數(shù)組數(shù)組字面量數(shù)組構(gòu)造函數(shù)參數(shù)為數(shù)組建議使用數(shù)組字面量方式,性能好,代碼少,簡潔,畢竟代碼少。數(shù)組判斷方法用來判斷某個(gè)值是否為。的這是最簡潔最直接的遍歷數(shù)組元素的語法。把數(shù)組轉(zhuǎn)換為本地?cái)?shù)組,并返回結(jié)果。 前端學(xué)習(xí):前端教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:數(shù)組&數(shù)組方法使用詳解 Array對象 之前一...

    morgan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<