JavaScript:console.log('str'+int+int)的意外输出
请参阅下面的代码:JavaScript:console.log('str'+int+int)的意外输出,javascript,node.js,Javascript,Node.js,请参阅下面的代码: var fs = require('fs'); var file = 'test.js'; var search = new RegExp("\n", "g"); function printLineNum(err, fileContents) { if (err) return console.error(err.message); console.log("Total line(s) of document: %d", fileContents.matc
var fs = require('fs');
var file = 'test.js';
var search = new RegExp("\n", "g");
function printLineNum(err, fileContents) {
if (err) return console.error(err.message);
console.log("Total line(s) of document: %d", fileContents.match(search).length + 1);
}
fs.readFile(file, 'utf8', printLineNum);
// output: Total line(s) of document: 10
这是一段工作代码。但在我进行更改之前,第7行看起来像:
console.log("Total line(s) of document: " + fileContents.match(search).length + 1);
// output: 91
也可以通过在数字中添加括号来解决意外错误:
我知道如何避免这个错误,但我不知道到底出了什么问题。这是JavaScript还是与console.log有关
在这种情况下,串联运算符优先于加法运算符,并首先求值
对该声明的评估如下:
// string concatenation happens first
console.log((("string" + 9) + 1));
// resulting in more string concatenation
console.log(("string9" + 1));
console.log("string91");
在这种情况下,串联运算符优先于加法运算符,并首先求值
对该声明的评估如下:
// string concatenation happens first
console.log((("string" + 9) + 1));
// resulting in more string concatenation
console.log(("string9" + 1));
console.log("string91");
这是因为在JavaScript中,+运算符被重载以执行加法和字符串连接。如果任一操作数的类型为字符串,则串联优先 这被描述为: 加法运算符执行字符串串联或数字加法 生产加法表达式:加法表达式+乘法表达式的计算如下: 让lref是计算AdditiveExpression的结果。 让lval成为getvalueref。 让rref是计算乘法表达式的结果。 设rval为GetValuerref。 让lprim成为ToPrimitivelval。 让rprim成为最主要的。 如果Typelprim是String或Typerprim是String,则 返回由tostringprim后跟ToStringrprim连接而成的字符串 返回将加法运算应用于TonumberPrim和TonumberPrim的结果。见11.6.3下面的注释。
这是因为在JavaScript中,+运算符被重载以执行加法和字符串连接。如果任一操作数的类型为字符串,则串联优先 这被描述为: 加法运算符执行字符串串联或数字加法 生产加法表达式:加法表达式+乘法表达式的计算如下: 让lref是计算AdditiveExpression的结果。 让lval成为getvalueref。 让rref是计算乘法表达式的结果。 设rval为GetValuerref。 让lprim成为ToPrimitivelval。 让rprim成为最主要的。 如果Typelprim是String或Typerprim是String,则 返回由tostringprim后跟ToStringrprim连接而成的字符串 返回将加法运算应用于TonumberPrim和TonumberPrim的结果。见11.6.3下面的注释。
串联运算符的优先级高于加法运算符-这是不正确的。尝试1+2+x。串联运算符的优先级高于加法运算符-这是不正确的。试试1+2+x。
// string concatenation happens first
console.log((("string" + 9) + 1));
// resulting in more string concatenation
console.log(("string9" + 1));
console.log("string91");