为什么Regex.toString()不等于javascript中的字符串文字

时间:2018-03-17 19:01:29

标签: javascript regex string-literals

console.log(/\.js$/.toString() === '/\.js$/') // false
// or
console.log(/\.js$/.toString() == '/\.js$/') // false
   
// but
console.log(/\.js$/.toString()) // /\.js$/
console.log(/\.js$/.toString() === /\.js$/.toString()) // true

4 个答案:

答案 0 :(得分:3)

因为转换为字符串时,\的含义会发生变化。在字符串中,它用于转义字符,例如\n\t。在正则表达式中,它意味着从字面上理解下一个字符,例如.。因此,当转换为字符串\时必须进行转义,因此/\.js$/变为"/\\.js$/"。请注意,如果您随后将其提供给RegExp构造函数,则"\\.js$"将有效,而"\.js$"具有不同的含义,并被解释为/.js$/

答案 1 :(得分:1)

\是字符串文字中的一个特殊字符,用于转义下一个字符。使用其中的2个。



console.log(/\.js$/.toString() === '/\\.js$/') // true




答案 2 :(得分:1)

因为字符串' $.each( $(".form-check-input"), function() { console.log('iterating'); $(this).prop('checked', true); }); '变为 /\.js$/ ,所以会发生这种情况,因为'。 js中的' 实际上是scaped角色

所以基本上你要比较' /.js$/ ' /\.js$/ 是不同的字符串。

通过将字符串文字更改为/.js$/

来实现获取相同的字符串以逃避/

答案 3 :(得分:1)

查看自己的差异,console.log(/\.js$/.toString());打印/\.js$/console.log('/\.js$/');打印\.js$/,这显然是不同的。(因为两个字符串不同,你会得到假的)< / p>

&#13;
&#13;
console.log(/\.js$/.toString());
console.log('/\.js$/');
&#13;
&#13;
&#13;