思路:
第一种:直接将字符串中空格“ ”的地方替换成“%20“(错误)
ECMScript中的字符串是不可变的,意思是一旦创建,他们的值就不能变。要改变某个变量中的字符串,必须先销毁原有的字符串,然后将包含新值的另一个字符串保存到该变量。
无法直接在原有str上直接修改字符串
第一种:
//let str="java";
//str="java script";
第二种:
let str="java";
str=str+" script";
//str[1]="eer"; //报错:无法分配给字符串 'java script' 的只读属性 '1'
第二种:新分配空间
遍历s中的每个字符,并依次加入到新字符串str上;在此过程中,如果遇到“空格 ”,把它换成“%20”加到str;实现“空格 ”->“%20”.
//请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
/**
* @param {string} s
* @return {string}
*/
var replaceSpace = function(s) {
var str;
for(let i=0;i<s.length;i++){
if(s[i]==" "){
str=str+"%20";
}else{
str+=s[i];
}
}
return str;
};
输入:"We are happy."
输出:"undefinedWe%20are%20happy."
预期结果:"We%20are%20happy."
问题:js的变量在创建时会直接分配空间,undefined
解决:var str=new String();利用String构造函数创建字符串对象
/**
* @param {string} s
* @return {string}
*/
var replaceSpace = function(s) {
var str=new String();
for(let i=0;i<s.length;i++){
if(s[i]==" "){
str=str+"%20";
}else{
str+=s[i];
}
}
return str;
};
输入:"We are happy."
输出:"We%20are%20happy."
预期结果:"We%20are%20happy."