原始字符串是否始终保持不变?

时间:2013-06-17 10:27:47

标签: javascript

 var name = 'naGeoExit';

 var name = name.substring(2,5);      
 console.log(name); //output: Geo

第一个名称变量和第二个名称变量是在内存的不同部分分配的两个不同变量,还是原始变量的值正在被更改?

3 个答案:

答案 0 :(得分:4)

如果它们具有相同的名称并且在相同的范围内,则它们是相同的变量。

答案 1 :(得分:3)

在第1行,内存中有一个包含“naGeoExit”的字符串。范围内有一个变量,称为name,指向它。

在第二行,内存中有一个字符串子序列的副本。变量name现在指向那个。没有对原始字符串对象的引用,因此在某些时候它是垃圾收集。

使用var关键字表示“在当前范围(而不是全局范围)中创建变量”。当前作用域是一个闭包,例如函数定义(如果你不在函数中,它也可以是全局作用域)。

使用var两次不是语法错误,但其目的是创建一个新变量,每个范围只应使用一次。第二轮将无效。

答案 2 :(得分:1)

是的,原始字符串未经修改。但是,在您的示例中,它可立即用于垃圾回收。

这是一个示例,表明字符串未被更清楚地修改:

var n1 = 'naGeoExit';

var n2 = n1.substring(2,5);      
console.log(n1); //output: naGeoExit
console.log(n2); //output: Geo

在原始代码中,您只有一个变量名为name,并且您为其分配了substring操作的结果,这就是为什么原始字符串是立即可用于垃圾收集。在同一范围内重新声明相同的变量无效。所以代码:

var name = "foo";
var name = "bar";

...与:

完全相同
var name = "foo";
name = "bar";

......就此而言,完全相同:

var name;
name = "foo";
name = "bar";