Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果字符串在JS中是不可变的,那么为什么代码会改变字符串呢_Javascript_Arrays_String_Split - Fatal编程技术网

Javascript 如果字符串在JS中是不可变的,那么为什么代码会改变字符串呢

Javascript 如果字符串在JS中是不可变的,那么为什么代码会改变字符串呢,javascript,arrays,string,split,Javascript,Arrays,String,Split,我已将输入读取为字符串,拆分后字符串成为对象 process.stdin.resume(); process.stdin.setEncoding('utf8'); process.stdin.on('data',(c)=>{ in += c; }); process.stdin.on('end',()=>{ spliter(in); }); function spliter(in){ console.log(typeof(in)); in = in.s

我已将输入读取为字符串,拆分后字符串成为对象

process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin.on('data',(c)=>{
    in += c;
});
process.stdin.on('end',()=>{
    spliter(in);
});
function spliter(in){
    console.log(typeof(in));
    in = in.split('\n');
    console.log(typeof(in));
}

修改字符串变量时,javascript实际上不会修改内存中的字符串,而是创建一个全新的字符串,看起来像是对初始字符串的修改:

let str=“hi”;
str=str.trim();//将创建一个新字符串“hi”

console.log(str)您的代码不会改变字符串


字符串(以及其他基本类型)在JS中是不可变的

改变某物意味着改变它而不创造另一个

字符串修饰符方法返回新字符串,但不更改原始字符串,例如:

const a = 'Hello world!'
const b = a.slice(0,5)

console.log(a) //Hello world!
console.log(b) //Hello
但是,您仍然可以使用新字符串重新分配字符串变量(但这不是突变):


你的代码有点复杂
String#split()
返回字符串数组,但不改变原始字符串:

const a = 'Hello world!'
const b = a.split('o')

console.log(a) //Hello world!
console.log(b) //['Hell', ' w', 'rld!']

数组是(事实上)对象,它们是可变的,但不是它们所包含的字符串(和其他原语)。

很简单,你没有改变字符串

如果是,以下代码(基于您的代码)将在两个console.log中输出对象

x='这是一个字符串';
函数拆分器(x){
x=x.split('\n');
控制台日志(类型(x));
}
分离器(x);

控制台日志(类型(x))任何字符串在哪里发生变异?这个全局变量
in+=c
spliter(in)
在你发布的代码中是不变的。。。在
中的参数
,您将更改为一个数组,但您没有“mutated a string”数组是JavaScript中的一种对象类型
typeof[]
将返回
object
。如果要确定它是否实际是数组,可以使用它在数组构造函数中找到的isArray方法:
array.isArray([])
返回true此外,字符串在JavaScript中不是不可变的。不知道你是从哪里得到这种误解的。只有常量声明的变量是不可变的。@jacobbenney-确定吗?关于javascript的每一个文档都与you@JacobPenney字符串(以及所有原语)在JS中是不可变的。他们的原型不是,但这是另一个问题。。。
const a = 'Hello world!'
const b = a.split('o')

console.log(a) //Hello world!
console.log(b) //['Hell', ' w', 'rld!']