在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ JS類型判斷

JS類型判斷

問題: 對 instanceof 的疑惑

根據(jù)MDN關(guān)于 instanceof 的描述:
object instanceof constructor
instanceof 運算符用來檢測 constructor.prototype 是否存在于參數(shù) object 的原型鏈上。

關(guān)于字面量字符串不能理解為什么不是String的實例。

MDN有這樣的例子:

var simpleStr = "This is a simple string"; 
var myString  = new String();
var newStr    = new String("String created with constructor");

simpleStr instanceof String; // returns false, 檢查原型鏈會找到 undefined
myString  instanceof String; // returns true
newStr    instanceof String; // returns true
myString  instanceof Object; // returns true

不太理解這里的檢查原型鏈會找到undefined

我自己測試的時候發(fā)現(xiàn)

const s = "abcdefg";

s instanceof String; // false

s.__proto__ === String.prototype; // true

這里字面量字符串的原型鏈不是有String.prototype嗎,那么為什么字面量字符串卻不是String的實例?

另外,這是我看到別人寫的 instanceof

function instance_of(L, R) {//L 表示左表達式,R 表示右表達式
 var O = R.prototype;// 取 R 的顯示原型
 L = L.__proto__;// 取 L 的隱式原型
 while (true) { 
   if (L === null) 
     return false; 
   if (O === L)// 這里重點:當(dāng) O 嚴(yán)格等于 L 時,返回 true 
     return true; 
   L = L.__proto__; 
 } 
}

const s = "abc";

instance_of(s, String); // true

這個實現(xiàn),得到的字面量字符串是String的實例,那么實現(xiàn)上是哪里出了問題?

回答
編輯回答
心沉
object instanceof constructor
參數(shù)
object
要檢測的對象.
constructor
某個構(gòu)造函數(shù)

我猜是右邊參數(shù)為構(gòu)造函數(shù),如果給字面字符串,又不是構(gòu)造函數(shù)類型,你左邊怎么給,都會為FALSH吧。

2018年2月1日 10:00
編輯回答
別瞎鬧

new String()得到的是一個string對象
clipboard.png

嚴(yán)格判斷數(shù)據(jù)類型的話還是用Object.prototype.toString.call(value)吧

2018年7月28日 02:45
編輯回答
萢萢糖

判斷類型的話toString支持更多選擇

(沒測試:全憑感覺)
另外在JS中貌似只有對象才存在原型吧,String是一個全局的對象,而你自己創(chuàng)建的字面量是沒有原型的。

2018年6月25日 17:31
編輯回答
陌離殤

應(yīng)該是左邊的沒有被當(dāng)成對象而當(dāng)成字符串了,"This is a simple string" instanceof String 這樣的話返回值也是false。至于原型鏈上的確是能找到String.prototype的,所以應(yīng)該是根本沒去鏈上找。

2018年7月25日 02:31