相关疑难解决方法(0)

Javascript字符串如何不是对象?

这不是一个笑话的设置,我真的在问.

Douglas Crockford喜欢说在javascript原型面向对象语言中没有必要new.

他解释说,这new只是为了让人们从基于类(即" 经典 ")的面向对象编程语言中获得某种程度的安慰:

JavaScript,我们很难new

JavaScript是一种原型语言,但它有一个new运算符,试图使它看起来有点像经典语言.这往往会使程序员感到困惑,从而导致一些有问题的编程模式.

您永远不需要new Object()在JavaScript中使用.请改用对象文字{}.

好的:

  • new
  • {}

但是后来评论者VítorDeAraújo指出这两者并不相同.他给出了一个例子,表明a string不像object:

字符串对象和字符串值不是同一个东西:

js> p = "Foo"
Foo
js> p.weight = 42
42
js> p.weight // Returns undefined

js> q = new String("Foo")
Foo
js> q.weight = 42
42
js> q.weight
42
Run Code Online (Sandbox Code Playgroud)

字符串值不能具有新属性.同样的事情对其他类型也有效.

这里发生了什么string不是一个object?我是否混淆了javascript与其他一些语言,其中一切都是对象?

javascript

36
推荐指数
1
解决办法
6802
查看次数

在JavaScript中,除了字符串之外,为什么没有任何对象彼此相等?

JS中的所有东西都是一个对象.我一直都知道,我完全理解这一点.我知道为什么{} !== {}.这是两个不同的对象.就像你写出来一样new Object() == new Object().

其他一些例子:

{} == {} // => false
[] == [] // => false
/ / == / / // => false
new String() == new String() // => false
Run Code Online (Sandbox Code Playgroud)

但是,Strings也是对象(这就是为什么你可以做''.replace()和扩展它们),为什么这个工作:

'' == '' // => true
Run Code Online (Sandbox Code Playgroud)

显然,如果这不起作用,比较两个字符串会非常头疼,但这似乎与语言的其余部分不一致.在内部,发生了什么?它只是一次性还是有其他概念背后的?

javascript ecmascript-5

8
推荐指数
1
解决办法
186
查看次数

有什么理由说JS字符串不能自相同吗?(见图)

是否有任何理由为什么字符串不能自相同?我正在处理大量的字符串,最后一些字符串不等于自己.

这是一张图片,展示了我在说什么.

示例图像

有任何想法吗?

已解决:有一个回车符(\ r)附在其中一个字符串的末尾.我使用String.length来查看每个字符串的长度,它们不同(5和6).然后我使用String.charAt查看了字符串.在Chrome中,这显示一个空字符串("").但是,空字符串不是虚假值.我在FireFox中尝试了这个,它显示了回车.

javascript string

8
推荐指数
1
解决办法
2281
查看次数

"String"对象与JavaScript中的字符串文字的区别

可能重复:
javascript字符串类型和字符串对象之间的区别?

在Firebug中写下这个简单的代码:

console.log(new String("string instance"));
console.log("string instance");
Run Code Online (Sandbox Code Playgroud)

你看到的是:

在此输入图像描述

为什么这两个console.log()调用导致不同的输出?为什么字符串文字与通过String对象创建字符串不同?它是Firebug表示风格吗?或者它们的性质不同?

javascript string firebug

7
推荐指数
1
解决办法
4485
查看次数

Javascript Undefined String Property Tuthiness

我经常在我的Javascript中使用以下模式:

x = couldBeNullThing || valueIfItIsNull;
Run Code Online (Sandbox Code Playgroud)

因为它胜于:

x = couldBeNullThing ? couldBeNullThing : valueIfItIsNull;
Run Code Online (Sandbox Code Playgroud)

我也经常使用相同模式的轻微变体:

x = x || valueIfXIsNotDefined;
Run Code Online (Sandbox Code Playgroud)

这一切都很棒...除了问题,我最近发现:

foo = "";
//assert foo.x === undefined;
foo.x = foo.x || valueIfXIsNotDefined;
//assert foo.x === undefined;
Run Code Online (Sandbox Code Playgroud)

换句话说,如果你有一个字符串,你就做了string.aPropertyThatStringDoesntHave || foo,你既不会回头也不会回到实际价值; 相反,你得到了未定义.

谁能解释为什么会这样?在我看来,如果foo.x未定义,那么foo.x || anythingElse应该总是导致任何东西......所以为什么不呢?

javascript truthiness

5
推荐指数
1
解决办法
319
查看次数

为什么string ='0'在javascript中并不严格等于new String('0')

为什么在严格地与原始字符串值进行比较时,字符串对象的创建不会返回true?

var obj = new String('0');
var str = '0';

console.log(obj == str); //returns true
console.log(obj === str); //returns false
Run Code Online (Sandbox Code Playgroud)

javascript

4
推荐指数
1
解决办法
91
查看次数

标签 统计

javascript ×6

string ×2

ecmascript-5 ×1

firebug ×1

truthiness ×1