vue隨筆之二型別判斷一

2021-09-21 02:01:20 字數 2237 閱讀 9504

/**

* 判斷是否為undefined或者null

*/ function isdef(v)

/*** 判斷是否不為undefined或者null

*/function isdef(v)

/*** 判斷是否為true

*/function istrue(v)

/*** 判斷是否為false

*/function isfalse(v)

/*** 判斷是否為原始型別:字串、數字或者布林型別,以及es6新出的symbol型別

*/function isobject(obj)

以上型別比較簡單,下面將介紹以下幾種型別:

var _tostring = object.prototype.tostring;

function torawtype(value)

首先,定義私有屬性_tostring為object原型上的方法tostring。_tostring.call(value).slice(8,-1)可以分為兩步:

1、var str =_tostring.call(value);

2、str.slice(8,-1);

型別判斷在 web 開發中有非常廣泛的應用,簡單的有判斷數字還是字串,高階一點的有判斷陣列還是物件,再高階一點的有判斷日期、正則、錯誤型別,再再高階一點還有比如判斷 plainobject、空物件、window 物件等等。

在這裡,我們不僅有個疑問,為什麼不用typeof呢,typeof能檢測六種基本型別和function(symbol是es6新出的,這裡不做介紹,有興趣的可以底下蒐集資料),可以typeof null為object,typeof new date()等new出來的物件都為 object型別。可謂漏洞百出。而object.prototype.tostring就是更好的方法。

當 tostring 方法被呼叫的時候,下面的步驟會被執行:

1、如果 this 值是 undefined,就返回 [object undefined]

2、如果 this 的值是 null,就返回 [object null]

3、讓 o 成為 toobject(this) 的結果

4、讓 class 成為 o 的內部屬性 [[class]] 的值

5、最後返回由 "[object " 和 class 和 "]" 三個部分組成的字串

通過規範,我們至少知道了呼叫 object.prototype.tostring 會返回乙個由 "[object " 和 class 和 "]" 組成的字串,而 class 是要判斷的物件的內部屬性。正是因為這種特性,我們可以用 object.prototype.tostring 方法識別出14種型別;

var num = 1;          // [object number]

var str = '123'; // [object string]

var flag = true; // [object boolean]

var def = undefined; // [object undefined]

var null = null; // [object null]

var obj = // [object object]

var arr = [1, 2, 3]; // [object array]

var date = new date(); // [object date]

var err = new error(); // [object error]

var reg = /a/g; // [object regexp]

var fn = function a(){}; // [object function]

console.log(object.prototype.tostring.call(math)); // [object math]

console.log(object.prototype.tostring.call(json)); // [object json]

function func()

func();

現在再來看我們的第一步_tostring.call(value),也就是轉化為類似[object object],而第二步就是把[object object]slice成object,string,date等

原文

前端面試系列之二 型別轉換

0 或 0 0,nan false undefined null這幾個是false 其他的全都是true。if a b 的正確理解方式是 a b 進行表示式求值後,然後在轉換為boolean型別。是短路語法,求值後不一定是乙個boolean型別。短路表示式 1 只要 前面為false,不管 後面是t...

mysql概要(二)型別(數值型,字元型,時間型別

1.mysql數值型範圍 tinyint可選屬性 tinyint n unsigned zerofill n 表示顯示長度,與zerofill配合使用,即長度不夠用0填充,並且自動變成無符號的數,n僅表示一種顯示效果不配合zerofill沒有實際意義。unsigned 表示無符號,即表示 0且最大值...

型別庫(二) 型別庫的元素

如果你繞著乙個現實世界的圖書館走一走,你通常會看見許多各式各樣形狀大小很多不同方面的書籍 那些就是你期盼的幾乎無限的人類創造的知識 幸運的是,型別庫稍微簡單 只反映有限的元件資訊 任何在型別庫中的元素屬於下表中五類元素之一 元素目的 coclass 描述乙個特定物件實現的介面或排程介面 用clsid...