Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:console.log('str'+int+int)的意外输出_Javascript_Node.js - Fatal编程技术网

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");