Javascript 为什么字符串变成“this”时会被截断?
我在JavaScript中发现了一个特性(或者我的浏览器的想法): 在启用Firebug控制台的情况下运行上述命令,我得到: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>
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
...
*/
*/