Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么字符串变成“this”时会被截断?_Javascript - Fatal编程技术网

Javascript 为什么字符串变成“this”时会被截断?

Javascript 为什么字符串变成“this”时会被截断?,javascript,Javascript,我在JavaScript中发现了一个特性(或者我的浏览器的想法): 在启用Firebug控制台的情况下运行上述命令,我得到: Hello, world String { 0="H", 1="e", more...} 为什么字符串在成为传递给foo的this之前会自动变成一个奇怪的对象 我之所以称它为奇怪的对象,是因为jQuery被它卡住了。例如: $.each(["one", "two", "three"], function(i, x) { $('<p></p>

我在JavaScript中发现了一个特性(或者我的浏览器的想法):

在启用Firebug控制台的情况下运行上述命令,我得到:

Hello, world
String { 0="H", 1="e", more...}
为什么字符串在成为传递给
foo
this
之前会自动变成一个奇怪的对象

我之所以称它为奇怪的对象,是因为jQuery被它卡住了。例如:

$.each(["one", "two", "three"], function(i, x) {
    $('<p></p>').text(x)   .appendTo('body'); // Works
    $('<p></p>').text(this).appendTo('body'); // Doesn't work
});
$。每个([“一”,“二”,“三]),函数(i,x){
$(“

”).text(x).appendTo('body');//有效 $(“

”).text(this.appendTo('body');//不起作用 });
因为
这个
只是一个对象(我知道字符串是对象,但它们也是字符串):


这个
被强制到一个对象中,即
对象(“test”)
在内部被调用

(function() {
    return this;
}).call("test");

// returns same as `new String("test")` or `Object("test")`

请注意,使用严格模式确实会返回原语值:

(function() {
    "use strict";
    return this;
}).call("test") === "test"; // true

*

使用
foo.call(s1,s2)
时,调用函数
foo
,并将
this
关键字设置为
s1
。因为
这个
必须是一个对象(所以,不是一个原语值),所以它被转换成一个
字符串
对象

字符串的单个字符(通过
s=“…”
s=string(“…”
)创建)可以通过索引访问,因此

String { 0="H", 1="e", more...}


用于演示索引的代码:

var i=0, s = "Hello, world";
for(; i<s.length; i++){
    console.log(i, s[i]);
}
/* Prints:
   0 H
   1 e
    ...
  */
 */
var i=0,s=“你好,世界”;

对于(;iWell,
应参考
窗口
,如果它不在函数中。有趣的行为,假设与传递错误数量的参数有关。如果参数数量可变,则使用arguments对象。
String { 0="H", 1="e", more...}
function foo(arg)
{
    console.log(arg);   // passed as "Hello, world"
    console.log(this);  // passed as String("Hello, world")
    console.log(this instanceof String); //True
}
var i=0, s = "Hello, world";
for(; i<s.length; i++){
    console.log(i, s[i]);
}
/* Prints:
   0 H
   1 e
    ...
  */
 */