这可能是重复的,愚蠢的或偏离主题的,但实际的问题是问题的标题。
我想做一些简单的事情:
String.prototype.log = function() {
console.log(this);
return this;
}
当被调用时(例如在Firebug中),结果是:
String { 0="t", 1="e", 2="s", more...}
对于:"test".log()
,当然也会返回相同的内容。
现在,解决方法是在任何一方进行""
连接或this.toString()
。
为什么this
是String.prototype
范围内的对象而instanceof
同时属于Object
和String
?
答案 0 :(得分:2)
创建字符串时,实际上是创建字符串函数的实例(对象)。
在Chrome控制台中输入String
。
console.log(String);
Output : function String()
如果您创建一个字符串
var x = new String("aaa");
x
实际上是String
函数
console.log(x instanceof String); // true
为什么x是Object的实例?
在JavaScript中,每个对象都有一个__proto__
链接。
x.__proto__ == String.prototype;
这意味着x
的原始链接指向String
原型。
现在String.prototype
也有__proto__
。
String.prototype.__proto__ == Object.prototype;
instanceof
运营商首先搜索__proto__
链接并跟踪它。
x
的原型链接指向String
的原型,String
的原型指向Object
原型。< / p>
因此x
也是Object
的一个实例。
答案 1 :(得分:1)
不确定但找到了可能回答问题的内容:
使用参数值调用
SELECT flight_id, depart, arr, price FROM user.flightdb t2 LEFT JOIN user.booking t1 ON t1.flightID = t2.flight_id and t2.source = 1 and t2.dest = 4 AND t1.date = "02/02/2016" WHERE t1.flightID IS NULL;
时,将执行以下步骤:如果没有参数传递给这个函数调用,那么让s为“”。
否则,
如果NewTarget未定义且Type(value)为Symbol,则返回SymbolDescriptiveString(value)。
我们是ToString(值)。
ReturnIfAbrupt(一个或多个)。
如果未定义NewTarget,则返回s。
返回StringCreate(s,GetPrototypeFromConstructor(NewTarget,“%StringPrototype%”))。
String函数的length属性为1.
现在StringCreate会返回String exotic object。
根据它,
String对象是一个奇特的对象,它封装了一个String值,并公开了与String值的各个代码单元元素对应的虚拟整数索引数据属性。
Exotic String对象始终具有名为“length”的数据属性,其值是封装的String值中的代码单元元素的数量。代码单元数据属性和“长度”属性都是不可写和不可配置的。
答案 2 :(得分:0)
我可以找到的与此问题直接相关的最佳答案在JavaScript所基于的ECMAScript规范中得到了解答。
这里是String的规范...... http://www.ecma-international.org/ecma-262/5.1/#sec-8.4
摘录:
String类型是0或0的所有有序有序序列的集合 更多16位无符号整数值(“元素”)。 String类型是 通常用于表示正在运行的ECMAScript中的文本数据 程序,在这种情况下,String中的每个元素都被视为代码 单位价值(见第6条)。每个元素都被视为占用一个 序列中的位置。这些职位编入索引 非负整数。第一个元素(如果有的话)位于0位置 位置1处的下一个元素(如果有),依此类推。字符串的长度 是其中的元素数(即16位值)。空的 字符串的长度为零,因此不包含任何元素。
特别是这部分:
每个元素被视为占据序列中的位置。 这些位置用非负整数索引。
这解释了为什么显示的字符串的实际更真实的存储本质上是数组的。按照规范中的要求,字符按顺序进行索引。
答案 3 :(得分:0)
在调用String
函数之前,原始字符串“test”为boxed到log
类型的对象中。