我确定这是一个非常基本的问题,但我已经找到了相当多的答案,我无法找到它。
我想要做的就是查看数组中的元素是否与}
匹配(即右括号)。但这不起作用:line === '}'
。
我可以使用line.match(/^\}$/)
(我正在做的事情)。
猜猜它与大括号是特殊字符有关,但如果他们用引号括起来,那为什么会这么重要?为什么我不能引用标点符号?
更新:呃,对不起,我不知道这是怎么发生的。我向上帝发誓我在发布前仔细测试过,但现在我的代码按预期工作line == "}"
,line === "}"
,line == '}'
和line === '}'
。在我的轻微辩护中我唯一可以说的是我在功能中遇到了多个问题,我认为这仍然是一个问题。它不是。这些问题都在其他地方。
更新2:由于人们在询问,这里是周围的功能。其目的是遍历包含JavaScript文件行的数组,并复制传递函数的文本。该代码假定一个函数来复制结束,只要'}'被发现...这就是为什么我要测试它。在调用这段代码时我经常得到undefined
,当我切换到正则表达式时,我确实让它工作了。但显然我在尝试使用正则表达式的同时解决了这个问题。我的教训是认真测试,一次只尝试一件事:
// Return an array containing the text of the input function.
function load_function_text(funShun) {
// Iterate through the present JS file's text.
var line_num = 0; // Track line num so you can grab the previous line.
var current_function = [];
var copying_lines = false;
this_file.forEach(function(line) {
// Start copying when 'function funShun' is spotted. (Start pushing from previous line.)
if (line.match("function " + funShun)) {
current_function.push(this_file[line_num - 1]);
current_function.push(line);
copying_lines = true;
line_num += 1;
// Stop copying and return when '}' is spotted.
} else if (copying_lines && line === "}") {
// Add this line.
current_function.push(line);
// Stop copying when end of function is reached.
copying_lines = false;
} else {
if (copying_lines) current_function.push(line);
line_num += 1;
}
});
return current_function;
}
更新3:事实证明我的原始问题实际上是合法的。然而,这是一个Windows换行问题。在准备我正在迭代的this_file
数组的Ajax处理函数中,我在responseText
上分割\n
;但是.js文件是在Windows中创建的,因此它的换行符都是\r\n
。啊!
这就是为什么我的控制台报告整行是}
的原因,但事实上,我使用的整个行是}\r
。我永远不会匹配那个,所以line.match(/^}$/)
可能是真的,而假的是'line ==='}'!因此,我想要成为某个条件的某个条件始终为false,因此脚本始终复制到文件的末尾,而不是在我想要复制的位的末尾停止。 (这是您单击"查看"时弹出的代码。)
一旦我开始拆分" \ r \ n",它在Windows中完美运行。然后我发现它没有在Heroku上工作,所以我想出了如何做得更好:this_file = xhr.responseText.match(/[^\r?\n]+/g);
。
Heroku here,repo here。谢谢你的耐心等待。
答案 0 :(得分:0)
===
会比较各种类型,因此如果line
与'}'
的类型不同,则会生成false
:
line = ['}']
console.log(line === '}') // false
console.log(line == '}') // true
console.log(/^\}$/.test(line)) // true
console.log(typeof line) // object
console.log(typeof '}') // string
答案 1 :(得分:0)
您是否尝试过这样做:
line == '}'
另外:我也测试过:
line === '}'
它工作正常! 阅读以上评论!
在Slai的另一个答案中也尝试这个吗?
line = new String('}') console.log(line === '}') // false console.log(line == '}') // true console.log(/^\}$/.test(line)) // true
JSFIDDLE DEMO:https://jsfiddle.net/hanstavo/ck443sbn/