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!']