与function.call一起使用时给出意外输出的值

时间:2014-08-01 12:42:39

标签: javascript

我正在学习javascript我试图理解这个与apply / call一起使用时的概念但是我被困在这段代码中。

foo = function(){
  console.log(this)
}
foo.call("random")

输出正在按预期给出一个字符串对象,但为什么该字符串显示为字符串数组。

String { 0="r", 1="a", 2="n", 3="d", 4="o", 5="m" }

我所期待的是。

String{ }

是数字的情况

foo.call(121)

输出

Number{ }

1 个答案:

答案 0 :(得分:3)

  

输出正在按预期给出一个字符串对象

只是因为你正在使用草率模式。在严格模式下,它将是一个原始字符串值。

  

但为什么字符串显示为字符串数组。

因为String objects类似于数组,所以索引上有.length个单字符串。您的控制台如何显示但依赖于实现:

// Chrome
String {0: "r", 1: "a", 2: "n", 3: "d", 4: "o", 5: "m", length: 6}
// Firefox
String { 0="r", 1="a", 2="n", more...}
// Opera
[+] String
// IE
▷ [object String]{0: "r", 1: "a", 2: "n", 3: "d", 4: "o", 5: "m", length: 6}