javascript冷門小知識

1、判斷一個值是不是NaN

function isActualNaN(value) {
    return value !== value;
}

2、怎么判斷一個函數(shù)是function、generator function、async function

var toStr = Object.prototype.toString;

var a=function(){};
var b=function *(){};
var c=async function(){};

console.log(toStr.call(a))
//[object Function]
console.log(toStr.call(b))
//[object GeneratorFunction]
console.log(toStr.call(c))
//[object AsyncFunction]

當(dāng)時在看這段代碼的時候,我就在想為什么要用Object原型上的toString(),而不使用a.toString()?后來我在控制臺打印了一下內(nèi)容是function(){},也就是a方法的代碼,上MDN查了一下,發(fā)現(xiàn)Function.prototype上也有一 個toString函數(shù),這個函數(shù)會返回當(dāng)前函數(shù)源代碼的字符串。
依據(jù)js對象查找屬性的原則,首先會在對象本身查找這個屬性,如果找不到沿著原型鏈一直往上找,直到找到Object.prototype為止。
以a函數(shù)為例,它本身沒有toString方法,于是上原型鏈上去找,結(jié)果在Function.prototype上找到的這個方法,最后執(zhí)行的代碼實際上是
Function.prototype.toString.call(a)。
Object.prototype.toString()返回一個表示對象的字符串,因此得手動調(diào)用才能獲取到一個對象真正的類型。
到這里我們還可以再擴展一下,用Object.prototype.toString()做對象的類型檢測

console.log(toStr.call("eee"));
//[object String]
console.log(toStr.call(1));
//[object Number]
console.log(toStr.call(Math));
//[object Math]
console.log(toStr.call([1,2,3]));
//[object Array]
console.log(toStr.call(null));
//[object Null]
console.log(toStr.call(undefined));
//[object Undefined]

3、void 0 是什么?為什么要用void 0

console.log(void 0 ===undefined);
//true

打印的結(jié)果是true,說明undefined和void 0是一樣的,所以當(dāng)我們想要使用undefined的,完全可以裝逼寫個void 0 ,然而事實并不是這樣!
事實上undefined并不是一個關(guān)鍵字,它是一個全局變量,這個變量的值是可以修改的,請看下面的代碼

console.log(void 0 === undefined);
//true
var undefined = 1;
console.log(void 0 === undefined);
//false

undefined被賦值了,我們無法再用if(value === undefined)去判斷一個值是不是zhenzheng的undefined,所以為了安全起見,我們可以使用void 0,在void運算符中,不能被javascript重寫并且始終返回沒有被賦值的undefined

最后編輯于
?著作權(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)容

  • ??面向?qū)ο螅∣bject-Oriented,OO)的語言有一個標志,那就是它們都有類的概念,而通過類可以創(chuàng)建任意...
    霜天曉閱讀 2,263評論 0 6
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,569評論 0 13
  • 今天去面試,興致勃勃的,本著不卑不亢的原則。 見了面試官,愉快的交談,偶得一消息算是一師兄,整體談話聊天都比較順利...
    Minh閱讀 240評論 0 0
  • 出門之前,妹妹說回來后給我一個驚喜?;貋砗蠊挥畜@喜掛在柜子上。猜猜看是什么呢?妹妹給媽媽剝的愛心松子,剝了很多,...
    擎天柱_6e9a閱讀 228評論 0 0
  • 今天是精要思維第212篇 眾所周知,一張好的圖片能為PPT的美感加分不少,可為什么找到一張合適的圖片就這么難?我們...
    王宜國閱讀 760評論 0 0

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