原始字符串在Chrome控制台中很好地显示。但String对象如下:
s = new String('foo bar')
==> String {0: "f", 1: "o", 2: "o", 3: " ", 4: "b", 5: "a", 6: "r", length: 7, [[PrimitiveValue]]: "foo bar"}
我知道我可以通过s+''
或s.toString()
更精彩地看到它。但我经常需要查看阵列和其他充满这些东西的结构。所以我得到的帮助不大:
[s,s,s]
==> [String, String, String]
当我展开其中一个字符串时,我得到了整个字符数组的垂直表示。
如果没有好的答案,也许有人至少可以同情我。
答案 0 :(得分:2)
厚颜无耻的答案是Chrome以这种方式显示它,因为这就是String对象。 Chrome会尝试将任何旧对象转换为原语吗?
Dandavis的评论是正确的 - 根据您的使用情况,您可以修改String原型,然后使用原语来提高可读性并依赖primitive being cast to a String object(从而使您的方法可用):
JavaScript会自动将基元转换为String对象,因此 可以将String对象方法用于原始字符串。
e.g。
String.prototype.upper = function () {
return this.toUpperCase();
};
document.write("foo bar".upper());

如果你真的想,你可以写一个类似的对象:
function MyString(value) {
this['[[PrimitiveValue]]'] = value;
this.length = value.length;
for (var i = 0;i<value.length;i++) { this[i] = value.charAt(i); }
this.charAt = function(val) {
return this[val];
};
this.toString = function() { return this.primitive };
return this;
}
var myString = new MyString('foo bar');
var string = new String('foo bar');
document.write('custom:', myString, ' native:', string, '<br/> check the console too');
console.log('custom:', myString, ' native:', string)
&#13;
会将类似的内容输出到控制台:
MyString {0: "f", 1: "o", 2: "o", 3: " ", 4: "b", 5: "a", 6: "r", [[PrimitiveValue]]: "foo bar", length: 7, charAt: function, toString: function}