2015-05-16 22 views
0

我对此感到困惑。我有以下代码。为什么s.len`未定义(而不是4),而`s`的值为`test`? - JavaScript

var s = "test"; 
s.len = 4; 
var t = s.len; 

的问题是,为什么变量tundefined值。

如果您在代码之后检查s.len,则它是未定义的。 如果您选择s,则值为test。不知道这里发生了什么事。我相信有一个解释,但不能让我的头,并不知道如何搜索。

对于那些考虑投票的人。这是我们在课程中遇到的一个问题,我们预计将在这个谜语的下一次会议上做准备。 我对编程并不陌生,但我未能研究JavaScript如何处理此代码。这是真正有效的代码,在你的开发工具中执行它,你会看到。

我为字符串s定义了一个名为len的属性赋值为4.这个属性是,我相信创建,但未定义。我想现在为什么呢?是否特定于JavaScript中的字符串?

+3

'.length',不'.len' – david

+1

分配's.len = 4'这是更多钞票只有当's'是一个对象,'len'是's'的一部分。 – Sachink

+0

如果你想获得字符串's'的长度,只需使用's.lenght'。为什么你给字符串长度赋值“4”? – Sachink

回答

3

,但我不研究的JavaScript如何处理这个代码。

很简单:字符串是JS中的基本类型,这意味着它们本身没有属性。

对于.运算符来处理它们(例如,对于.length调用),javascript定义了一种称为“包装对象”的东西。

所以,当你试图访问一个原始对象的属性 - 一个临时的包装对象被创建,其行为作为一个对象,因此你可以访问和分配属性。

问题是包装器对象是临时的,所以在用它来访问一个属性之后,该对象会被丢弃,并且它的所有状态都被丢弃。

这就是为什么当您指定.len属性时,您无法在下一行访问它:它已丢失。

所以对于实际发生的场景,在后面的代码伪代码是

var s = "test"; 
(new String(s)).len = 4; // here you add an attribute for a new object 
         // and `s` is left untouched 
var t = s.len; 
+0

这对我来说简洁明了。谢谢@zerkms – Elyasin

2

问题是为什么变量t的值为undefined。

因为您已将s定义为字符串而不是对象。所以s.len应该是undefined

我不确定你想要做什么。但是,如果你想得到slength然后t = s.length将简单地工作。

我为字符串s定义了一个名为len的属性,赋值给它4.这个属性是我相信创建的,但是没有定义。我想现在为什么呢?是否特定于JavaScript中的字符串?

你可以从这个question

+0

是不是可以创建一个新的属性来字符串? – Elyasin

+0

你可以按照这个http://stackoverflow.com/questions/5201138/why-cant-i-add-properties-to-a-string-object-in-javascript @Elyasin – hasan3050

+0

完美答案@ hasan3050。将此添加到您的答案中,我立即接受。这正是我试图找到的解释。谢谢。 – Elyasin

0

运行找到了答案:

var s1 = "test"; 
console.log(typeof s1)//string 
var s2 = {} 
console.log(typeof s2)//object 
s1.len = 4; 
s2.len = 4; 
console.log(s1.len);//undefine 
console.log(s2.len);//4 
+0

谢谢哈登。这提出了一个问题。如果字符串不是对象,那么我不知道它们可以具有属性。 – Elyasin

+0

原始类型也被称为简单数据类型 –

相关问题