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
最佳答案
因为转换为字符串后,\
的含义发生了变化。在字符串中,它用于转义字符,例如\n
和\t
。在正则表达式中,这意味着按字面意思获取下一个字符,例如您的情况下的 .
。因此,转换为字符串时 \
必须进行转义,因此 /\.js$/
变为 "/\\.js$/"
。请注意,如果您随后将其输入到 RegExp
构造函数中,则 "\\.js$"
将有效,而 "\.js$"
> 将具有不同的含义,并被解释为 /.js$/
关于javascript - 为什么 Regex.toString() 不等于 javascript 中的字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49340770/