成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

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

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

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

你會發現用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; } // 繼續向 proto 的原型鏈上遍歷 proto = Object.getPrototypeOf(proto); }}Object.prototype.toString()toString() 方法返回一個表示該對象的字符串。該方法旨在重寫(自定義)派生類對象的類型轉換的邏輯。valueOf() 方法返回對象的原始值表示

該方法由 字符串轉換優先調用, 但是 數字的強制轉換和原始值的強制轉換 會優先調用 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 類型,被識別為字符串拼接,并會優先將另一側轉換為字符串類型。當一側為 Number 類型,另一側為原始類型,則將原始類型轉換為 Number 類型。當一側為 Number 類型,另一側為引用類型,將引用類型和 Number 類型轉換成字符串后拼接。只有 null undefined '' NaN 0 false 這幾個是 false,其他的情況都是 true,比如 {} , []。

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

標簽: JavaScript
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
不卡的电影网站| 91视频观看免费| 成人av免费网站| 国产亚洲欧美日韩在线一区| 一本色道久久综合亚洲精品不| 美女视频黄免费的久久| 国产精品三级视频| 欧美日韩夫妻久久| 亚洲承认在线| 国产mv日韩mv欧美| 综合婷婷亚洲小说| 日韩视频在线你懂得| 一区二区三区四区五区精品| 国产成人精品在线看| 亚洲一区二区四区蜜桃| 精品国产精品网麻豆系列| 久久精品日产第一区二区| 91在线观看免费视频| 免费高清在线视频一区·| 国产精品久久久久久亚洲伦| 日韩欧美综合一区| 一本色道综合亚洲| 中文亚洲字幕| 黄色在线一区| 99re视频精品| 美国av一区二区| 亚洲一区二区三区美女| 中文字幕av在线一区二区三区| 91麻豆精品国产91久久久使用方法| 国产欧美短视频| 成人精品国产免费网站| 久久99国内精品| 亚洲一区二区三区四区在线| 国产午夜久久久久| 精品国产一区二区在线观看| 51精品久久久久久久蜜臀| 在线观看免费一区| 在线视频中文字幕一区二区| 一区二区冒白浆视频| 在线观看亚洲| 欧美jizzhd精品欧美喷水 | 国产乱妇无码大片在线观看| 亚洲第一二三四区| 午夜欧美一区二区三区在线播放| 国产精品视频免费看| 国产欧美日产一区| 亚洲国产精品精华液2区45| 国产日韩精品一区| 国产精品国产三级国产aⅴ原创 | 亚洲另类在线视频| 亚洲精品国产无天堂网2021| 欧美不卡三区| 国产精品国码视频| 日韩视频久久| 一本色道久久综合狠狠躁的推荐| 色悠悠久久综合| 欧美性猛交xxxx黑人交| 欧美日韩一区成人| 日韩欧美亚洲国产另类 | 国产麻豆精品久久一二三| 国产99久久久久久免费看农村| 久久99九九99精品| 床上的激情91.| 欧美不卡在线| 国产欧美精品久久| 在线观看免费视频综合| 欧美一区二区视频在线观看2020| 91精品国产高清一区二区三区蜜臀 | 欧美三级午夜理伦三级中文幕| 欧美激情一区| 久久久久国产精品一区三寸| 在线看日韩精品电影| 精品久久久久久久久久久久久久久 | 亚洲电影欧美电影有声小说| 蜜桃视频一区二区| 99这里只有精品| 精品福利电影| 色吧成人激情小说| 日韩免费看网站| 亚洲老妇xxxxxx| 久久国产精品露脸对白| 99这里只有久久精品视频| 狠狠色噜噜狠狠狠狠色吗综合| 亚洲日韩视频| 欧美一区二区三区公司| 国产精品免费观看视频| 亚洲v中文字幕| 国产成人自拍在线| 一区二区三区国产盗摄| 7777精品伊人久久久大香线蕉最新版 | 91精品国产乱| 亚洲免费电影在线| 国产一区二三区好的| 91丝袜美腿高跟国产极品老师| 国产日韩欧美二区| 日韩欧美不卡一区| 亚洲视频在线观看三级| 国产一区在线看| 国产日韩三区| 国产欧美一区在线| 九九热在线视频观看这里只有精品| 国自产拍偷拍福利精品免费一 | 亚洲一级电影视频| 欧美另类专区| 欧美一区二区美女| 性久久久久久久久| 成人黄色片在线观看| 99精品福利视频| 久久综合色婷婷| 久久精品久久99精品久久| 亚洲性色视频| 久久先锋影音av| 国产一区 二区| 久热这里只精品99re8久| 亚洲欧洲日韩一区二区三区| 成人av网在线| 91精品国产欧美一区二区成人| 偷拍日韩校园综合在线| 日韩香蕉视频| 日韩一区有码在线| 91免费视频网址| 91麻豆精品国产综合久久久久久| 天堂av在线一区| 91久久黄色| 国产精品不卡一区二区三区| 本田岬高潮一区二区三区| 制服丝袜在线91| 日本美女一区二区三区视频| 国产精品手机在线| 亚洲乱码日产精品bd| 国内自拍视频一区二区三区| 久久久久国产成人精品亚洲午夜| 国产成人免费视频网站| 欧美探花视频资源| 精品一区二区综合| 欧美色图免费看| 久久99精品久久久久久国产越南| 欧美亚洲国产bt| 久久精品av麻豆的观看方式| 一本久久精品一区二区| 一区二区三区高清不卡| 99视频一区| 亚洲男同1069视频| 国产日韩欧美综合精品| 天天色综合天天| 在线观看国产一区二区| 精品在线免费观看| 精品国产乱码久久久久久久| 欧美一区网站| 亚洲日本免费电影| 国产一区二区三区免费不卡| 亚洲图片你懂的| 亚洲欧洲三级| 午夜精品福利视频网站| 在线观看欧美日本| 国产激情偷乱视频一区二区三区| 日韩欧美视频一区| 97久久精品人人澡人人爽| 国产亚洲一区字幕| 亚洲激情视频| 天天做天天摸天天爽国产一区| 91行情网站电视在线观看高清版| 国产乱一区二区| 久久久国产综合精品女国产盗摄| 色综合天天性综合| 亚洲少妇30p| 久久免费一区| 99精品视频在线观看免费| 国产精品电影院| 亚洲欧美日韩另类精品一区二区三区| 麻豆精品国产91久久久久久| 欧美一区二区不卡视频| 国产精品二区二区三区| 亚洲成人先锋电影| 欧美v亚洲v综合ⅴ国产v| 99这里有精品| 国产不卡视频一区| 亚洲免费三区一区二区| 欧美在线999| 91蜜桃在线免费视频| 亚洲男人电影天堂| 91精品国产全国免费观看| 欧美三级不卡| 欧美aaaaaa午夜精品| 久久影院电视剧免费观看| 亚洲精品一区二区三区樱花| 韩国精品免费视频| 中文字幕在线观看一区| 欧美午夜精品久久久久久孕妇| 欧美一区二区三区四区夜夜大片| 亚洲国产综合人成综合网站| 日韩欧美中文一区二区| 国产一区二区三区奇米久涩| 国产成人精品一区二| 亚洲午夜久久久| 国产日韩精品一区二区三区 | 国产日产欧美一区二区视频| 欧美最新大片在线看| 亚洲国产精品毛片| av一区二区不卡|