为何JavaScript不支持像C语言那样同时自增并赋值?
为什么JavaScript中修改字符串下标的操作不生效?
先看C语言中的示例代码:
char* buf = calloc(5, 1); unsigned char buf_i = 0; memcpy(buf, "test", 4); /* buf_i++ 0, ++buf_i 1 */ buf[buf_i++] = 'e'; /* expected eest, result eest */ puts(buf);
这段代码能输出eest,因为buf是通过calloc分配的可变字符数组,可以直接通过下标修改对应内存位置的字符值。
再看JavaScript中的类似操作:
let text = "test" let text_i = 0 text[text_i++] = 'e'; console.log(text) // expected eest, result is test
这段代码无法得到预期的eest,核心原因是:
- JavaScript的字符串是不可变(immutable)类型:字符串一旦创建,其内部的字符就无法被直接修改。你执行
text[text_i++] = 'e'时,JS引擎不会抛出错误,但这个赋值操作不会对原字符串产生任何影响,原字符串"test"始终保持不变。
如果要在JavaScript中实现类似C语言的修改效果,需要先将字符串转换为可变的数组,修改后再转回字符串:
let text = "test"; let text_i = 0; // 转成可变数组 let textArr = text.split(''); textArr[text_i++] = 'e'; // 转回字符串 text = textArr.join(''); console.log(text); // 输出 eest
内容的提问来源于stack exchange,提问作者user21053170
相关产品推荐
相关产品推荐

