我目前正在使用codecademy.com学习JS,其中一件让我印象深刻的是:
"Hi, I am" + " " + name
这是一个简单的函数返回函数,当你把它放入
时打印你的名字printName(name)
然后它返回:
Hi, I am {name}
所以,为什么他们不把它简化为
"Hi, I am " + name
“+”是否有理由?
抱歉输入了这种奇怪的方式:/
答案 0 :(得分:2)
不。没有理由不能像"Hi, I am " + name;
一样容易。它们产生相同的结果。
我猜他们是这样编写的,所以你养成了在连接字符串时添加空格的习惯(因为变量通常不包含前导/尾随空格)。
答案 1 :(得分:1)
没有理由。也许他们最初打算你输入名字和姓氏之间的两个变量,并在它们之间留一个空格,但后来简化了演示并忘了将空格移到第一个字符串中?
这是我的猜测,但没有理由不做你说的话。事实上,如果 真的 想要变得迂腐,他们的示例效率低下,因为字符串连接需要一些开销,所以他们的版本稍微性能较差。虽然你不会注意到你在循环中反复做同样的操作,然后比较两者。
startTimer('with concat');
for (var count=0; count<99999; count++) {
var someString = "Hi, I am" + " " + name;
}
stopTimer('with concat');
startTimer('without concat');
for (var count=0; count<99999; count++) {
var someString = "Hi, I am " + name;
}
stopTimer('without concat');
演示:http://codepen.io/Chevex/pen/gpWNeq?editors=001
差异可以忽略不计,但你可以看到有一个:D
答案 2 :(得分:0)
我不知道他们的推理是什么,但是在EcmaScript +中,加法和字符串连接都被重载了。
请考虑以下事项:
console.log("Hi: " + 12 + 13);
> "Hi: 1213"
console.log("Hi: " + "" + 12 + "" + 13);
> "Hi: 1213"
console.log("Hi: " + (12 + 13));
> "Hi: 25"
我不知道他们对额外报价的理由是什么,但将“+”加到某个值会自动执行类型强制,这可能是也可能不是。
答案 3 :(得分:0)
代码中的“+”用于添加额外的对象以生成字符串。
是的,codecademy.com实际上可以将"Hi, I am" + " " + name
简化为"Hi, I am " + name
,但该网站仅用于教您代码的基础知识 - 在本例中为JavaScript。您可以将代码简化为"Hi, I am " + name
,但这不是任务所需(您可以在网站之外的自己的代码中执行此操作)。