日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

js類型判斷內部實現原理示例詳解

瀏覽:29日期:2022-06-12 16:59:45
目錄typeofinstanceof 的內部實現原理Object.prototype.toString()[[class]]總結typeof

typeof 操作符唯一的目的就是檢查數據類型

類型typeof 結果基本類型undefinedundefinedBooleanbooleanNumbernumberStringstringSymbolsymbolBigIntbigintnullobject引用類型Object(Object, Array, Map, Set, Regexp, Date 等)objectFunctionfunction

你會發(fā)現用typeof來判斷引用類型時, 都會返回 'object'. 為此, 引入了 instanceof

instanceof 運算符用于檢測構造函數的 prototype 屬性是否出現在某個實例對象的原型鏈上。

var arr = [];arr instanceof Array; // truetypeof arr; // 'object'function A() {}function B() {}// Javascript 繼承B.prototype = new A();var b = new B();b instanceof A; // trueb instanceof B; // trueinstanceof 的內部實現原理思路:

利用 原型和原型鏈, 每一個函數都有一個顯式的 prototype, 每一個對象都有一個隱式原型 **proto**, 當我們對象的原型鏈中存在構造函數的顯式原型 prototype時, 我們就可以確定它們之間存在關系;

function myInstanceOf(constructor, instance) { let prototype = constructor.prototype; let proto = instance.__proto__; while (true) { // 說明道原型鏈訂單, 還未找到, 返回 false if (proto === null) { return false; } if (proto === prototype) { return true; } // 繼續(xù)向 proto 的原型鏈上遍歷 proto = Object.getPrototypeOf(proto); }}Object.prototype.toString()toString() 方法返回一個表示該對象的字符串。該方法旨在重寫(自定義)派生類對象的類型轉換的邏輯。valueOf() 方法返回對象的原始值表示

該方法由 字符串轉換優(yōu)先調用, 但是 數字的強制轉換和原始值的強制轉換 會優(yōu)先調用 valueOf, 因為基本的 valueOf() 方法返回一個對象,toString() 方法通常在結束時調用

默認情況下(不重寫 toString方法), 任何一個對象調用 Object原生的 toString方法, 都會返回一個 [object type], 其中 type是對象的類型

let a = {};a; // {}a.toString(); // '[object Object]'[[class]]

每個 實例 都有一個 [[Class]] 屬性,這個屬性中就指定了上述字符串中的 type 。 [[Class]] 不能直接地被訪問,但通常可以通過 Object.prototype.toString.call(..) 方法調用來展示。

// Boolean 類型,tag 為 'Boolean'Object.prototype.toString.call(true); // => '[object Boolean]'// Number 類型,tag 為 'Number'Object.prototype.toString.call(10); // => '[object Boolean]'// String 類型,tag 為 'String'Object.prototype.toString.call('1312312'); // => '[object String]'// Array 類型,tag 為 'String'Object.prototype.toString.call([]); // => '[object Array]'// Function 類型, tag 為 'Function'Object.prototype.toString.call(function () {}); // => '[object Function]'// Error 類型(包含子類型),tag 為 'Error'Object.prototype.toString.call(new Error()); // => '[object Error]'// RegExp 類型,tag 為 'RegExp'Object.prototype.toString.call(/\d+/); // => '[object RegExp]'// Date 類型,tag 為 'Date'Object.prototype.toString.call(new Date()); // => '[object Date]'// 其他類型,tag 為 'Object'Object.prototype.toString.call(new (class {})()); // => '[object Object]'

所以可以通過這個方法來判斷每個對象的類型

function generator(type){ return function(value){ return Object.prototype.toString.call(value) === '[object '+ type +']' }}let isFunction = generator('Function')let isArray = generator('Array');let isDate = generator('Date');let isRegExp = generator('RegExp');isArray([])); // trueisDate(new Date()); // trueisRegExp(/\w/); // trueisFunction(function(){}); //true

以下是一道簡單的面試題

+[1 + [2] + 3] + [1 + 2 + true - false] + [[3 - false + '1']];// 拆分一下let a = +[1 + [2] + 3];// [2]會首先進行轉換 [2].valueOf, 結果不是基本類型, [2]在調用toString(), 返回'2', 最后 1 + '2' + 3, 1,3進行隱式轉換, +'123' ==> 123let b = [1 + 2 + true - false];// [3+true-false], true, false會進行轉換, true=>1, false=>0, 最后1-0==>[1+3]==>[4]==>[4].valueOf().toString()==>'4'let c = [[3 - false + '1']];// 先轉換數組里面的一層, [3-0+'1']==>['31'], 結果: [['31']]==>[['31']].valueOf().toString()==>'31'// 最后 a+b+c// 123+'4'+'31'==>123431

面試題目, 如何同時讓等式成立, a===1&&a===2&&a===3

思路:

重寫 a 的 valueOf 方法

let a = { value: [3, 2, 1], valueOf: function () { return this.value.pop(); },};總結當一側為 String 類型,被識別為字符串拼接,并會優(yōu)先將另一側轉換為字符串類型。當一側為 Number 類型,另一側為原始類型,則將原始類型轉換為 Number 類型。當一側為 Number 類型,另一側為引用類型,將引用類型和 Number 類型轉換成字符串后拼接。只有 null undefined '' NaN 0 false 這幾個是 false,其他的情況都是 true,比如 {} , []。

以上就是js類型判斷內部實現原理示例詳解的詳細內容,更多關于js類型判斷內部原理的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品美女久久久久久不卡| 亚洲免费毛片| 精品一区二区三区中文字幕 | 亚洲免费播放| 亚洲三级网址| 91精品国产自产在线丝袜啪| 免费久久精品视频| 免费视频一区二区| 亚洲精品系列| 国产精品a级| 另类av一区二区| 日韩欧美中文字幕一区二区三区| 亚洲激情av| 欧美亚洲二区| 亚洲免费毛片| 国产乱码精品一区二区三区亚洲人| 欧美sss在线视频| 99久久亚洲精品蜜臀| 久久精品99国产精品| 国产欧美自拍| 欧美精品一区二区久久| 免费观看久久久4p| 老牛国产精品一区的观看方式| 亚洲福利专区| 色婷婷色综合| 久久久久伊人| 国产麻豆久久| 亚洲综合另类| 美女视频黄久久| 精品国产精品久久一区免费式| 在线综合视频| 国产精品二区不卡| aa亚洲婷婷| 国产日韩欧美三区| 亚洲神马久久| 国产精品theporn| 亚洲图片久久| 国产亚洲精品v| 97精品国产99久久久久久免费| 日韩精品免费一区二区夜夜嗨 | 福利一区二区三区视频在线观看| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美成人a交片免费看| 欧美精品97| 青青草视频一区| 婷婷精品在线观看| 麻豆国产精品一区二区三区| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 久久国产成人| 麻豆精品91| 国内精品麻豆美女在线播放视频| 精品99久久| 国产欧美日韩精品一区二区免费| 欧美日本二区| 91精品亚洲| 国产精品三上| 日精品一区二区三区| 91成人精品在线| 国产精品一区二区三区www| 一区二区自拍| 亚洲精品激情| 中文字幕在线视频网站| 9久re热视频在线精品| 欧美国产91| 日韩不卡免费高清视频| 日韩欧美另类中文字幕| 青青青免费在线视频| 麻豆成人在线观看| 国产福利一区二区三区在线播放| 久久电影tv| 97精品国产福利一区二区三区| 日韩欧美一区二区三区免费观看| 不卡一区综合视频| 久久精品国产68国产精品亚洲| 奇米色欧美一区二区三区| 亚洲综合在线电影| 欧美一区二区三区高清视频| 久久九九国产| 久久午夜视频| 成人三级高清视频在线看| 国产麻豆久久| 亚洲欧美日本视频在线观看| 日韩在线网址| 亚洲一区有码| 欧美极品一区二区三区| 国产精品综合色区在线观看| 卡一卡二国产精品| 青草国产精品| 97精品国产一区二区三区| 亚洲国产专区| 亚洲精品a级片| 亚洲一区网站| 国产视频一区二| 亚洲专区一区| 激情黄产视频在线免费观看| 国产精品极品国产中出| 伊人久久大香线蕉av不卡| 日本aⅴ亚洲精品中文乱码| 91九色综合| 黄色成人精品网站| 国产精品二区不卡| 欧美 日韩 国产精品免费观看| 免费视频一区二区| 欧美日韩视频免费观看| 一级成人国产| 粉嫩av一区二区三区四区五区| 99在线精品免费视频九九视| 欧美日韩亚洲一区二区三区在线 | 欧美日韩xxxx| 日韩av电影一区| 国产一区 二区| 免费欧美在线视频| 欧美精品91| 欧美色综合网| 日本在线一区二区三区| 999精品一区| 久久中文字幕二区| 国产日韩欧美三级| 欧美日韩99| 天堂8中文在线最新版在线| 亚洲狼人精品一区二区三区| 99综合视频| 精品一区毛片| 欧美经典一区| 精品视频自拍| 久久先锋影音| 丝袜美腿诱惑一区二区三区| 92国产精品| www.com.cn成人| 激情黄产视频在线免费观看| 老牛国内精品亚洲成av人片| 亚洲国产成人二区| 中文亚洲免费| 亚洲一区资源| 中文字幕亚洲影视| 久久精品国产亚洲夜色av网站| 国产成人久久| 国产欧洲在线| 久久久人人人| 老司机精品在线| 蜜桃成人精品| 欧美黄页在线免费观看| 精精国产xxxx视频在线播放| 日韩免费看片| 久久一区国产| 日韩中文字幕高清在线观看| 大香伊人久久精品一区二区| 中文欧美日韩| 久久精品免费一区二区三区| av中文字幕在线观看第一页 | 久久精品国产免费| 黄色在线一区| 在线看片一区| 精品免费av| 在线一区二区三区视频| 好看不卡的中文字幕| 日本在线一区二区三区| 在线日韩电影| 亚洲精品乱码| 美女精品在线| 日韩久久电影| 黑丝一区二区| 欧美99久久| 国产福利91精品一区二区| a日韩av网址| 欧美午夜三级| 日本亚洲视频| 麻豆成人综合网| 日本不卡中文字幕| 日本aⅴ亚洲精品中文乱码| 国产乱码午夜在线视频| 亚洲深深色噜噜狠狠爱网站| 久久99免费视频| 日韩国产成人精品| 久久成人av| 日韩精品1区2区3区| 午夜a一级毛片亚洲欧洲| 免费成人在线观看| 成人午夜网址| 97国产成人高清在线观看| 日韩三区四区| 亚洲美女91| 亚洲精品福利| 精品视频一区二区三区四区五区| 欧洲毛片在线视频免费观看| 精品网站999| 国产一区二区三区不卡视频网站| 日韩影院在线观看| 欧美特黄视频| 你懂的国产精品永久在线| 先锋影音国产一区| bbw在线视频| 久久免费影院| 国产精品videosex极品| 中文字幕日本一区| 午夜国产精品视频| 婷婷精品在线| 国产精品久久久一区二区| 天堂va在线高清一区| 亚洲专区在线|