2011-02-01 72 views
3

我有3個問題。謝謝!關於JavaScript的TypeError異常的問題

第一個問題:

的JavaScript代碼的時候會引起 「類型錯誤」 異常?

其他問題:下面

我有代碼:

<!DOCTYPE html> 
<meta charset="utf-8"> 
<title>An HTML5 document</title> 
<script> 
    var str = 'abc'; // str's type is string, not object 

    // Syntax: Object.getPrototypeOf(object) 
    alert(Object.getPrototypeOf(str)); // Uncaught TypeError: Object.getPrototypeOf called on non-object 

    // Syntax: prototype.isPrototypeOf(object) 
    if (Object.prototype.isPrototypeOf(str)) { // false 
     alert('true'); 
    } else { 
     alert('false'); 
    } 
</script> 

方法getPrototypeOf()isPrototypeOf()都需要哪種類型應該是對象的參數。而str的類型是字符串。

爲什麼getPrototypeOf方法拋出一個TypeError異常,並且isPrototypeOf方法不拋出任何錯誤?

如果str的類型是對象(var str = new String('abc')),Object.prototype.isPrototypeOf(str)的結果是true。但上面的代碼的結果是false。爲什麼當str被用作isPrototypeOf方法的參數時,會自動從字符串轉換爲對象?

謝謝!

+0

你應該通過String構造函數構造你的「str」字符串(str = new String('abc')),這樣你就不會得到TypeError.I同意了..這有點奇怪 – 2011-02-01 19:28:23

回答

0
  1. 看看先打了"TypeError mdc"。當它拋出一個typeerror時,就取決於規範和用戶。

另一個回答具體問題。

0

我的理論是,isPrototypeOf有點像instanceof運算符的兄弟,所以他們真的應該有相同的基本語義。與舊版本中的功能相比,ECMAScript 5中的新功能更加嚴格。以下是使用的算法。

 
15.2.3.2 Object.getPrototypeOf (O) 

When the getPrototypeOf function is called with argument O, 
the following steps are taken: 

1. If Type(O) is not Object throw a TypeError exception. 
2. Return the value of the [[Prototype]] internal property of O. 

15.2.4.6 Object.prototype.isPrototypeOf (V) 

When the isPrototypeOf method is called with argument V, 
the following steps are taken: 

1. If V is not an object, return false. 
2. Let O be the result of calling ToObject passing the this value as 
    the argument. 
3. Repeat 
    a. Let V be the value of the [[Prototype]] internal property of V. 
    b. if V is null, return false 
    c. If O and V refer to the same object, return true.