分配正则表达式的测试功能失败

为什么(/x/.test)("x")可以正常工作,但是尝试用test(t=/x/.test)("x")t=/x/.test;t("x")函数提供替代名称却失败了?

Firefox给了我TypeError: undefined is not a non-null object,而Chrome给了我Uncaught TypeError: Method RegExp.prototype.test called on incompatible receiver undefined

我意识到(t=s=>/x/.test(s))("x")t=s=>/x/.test(s);t("x")可以工作,但是我试图理解为什么上面的方法不起作用。

cuijuncyanway 回答:分配正则表达式的测试功能失败

我将再次尝试解释:/x/.test或(/x/.test),该表达式的执行方式如下:

  /x/: a regular expression object is created. Similar to: new  RegExp (/x/).


 .test: The RegExp "test()" method is invoked. The string parameter of "test" method is mandatory. Not finding the parameterThen it returns error.

为什么起作用:函数f(s){}; g = f; 因为您正在将函数f分配给变量g。该分配不执行f。与g = f()不同的是,在这种情况下,g具有函数f返回的值。

为什么它不起作用:t = /x/.test,因为/ x /正在创建RegExp对象或正在调用其构造函数。然后,当返回此对象时,它将找到对test的调用,因此,它将执行该调用,但是test没有必需的参数,因此会发生错误。您可以这样:t = / x /; t.test(“ x”);首先分配一个正则表达式对象,然后调用测试方法。

我希望现在能理解我。

本文链接:https://www.f2er.com/2920373.html

大家都在问