我正在尝试调用文字函数,但出现了奇怪的行为。
考虑这段返回 true 的代码:
23 === (23)
当我写的时候尝试以下操作:
(23).toFixed(2)
我得到了预期的结果 "23.00" 但是当我尝试 23.toFixed(2) 时我得到了这个错误。
SyntaxError: Invalid or unexpected token
为什么会出现此错误?
最佳答案
Greg Hewgill 的答案和 icktoofay在所有方面都是正确的,但是,我想在抽象方面稍微深入一点:让我们看看根据 javascript 规范到底发生了什么。
Section 7.8.3规范的定义数字文字。我们可以看到以下内容:
DecimalLiteral ::
DecimalIntegerLiteral . DecimalDigits(opt) ExponentPart(opt)
. DecimalDigits ExponentPart(opt)
DecimalIntegerLiteral ExponentPart(opt)
DecimalIntegerLiteral ::
0
NonZeroDigit DecimalDigits(opt)
DecimalLiteral,一个数字,是一串十进制数字,后面可能跟一个点,然后可能跟其他数字(所有这些都可以跟一个指数, e12 例如)。换句话说,42. 是合法的,等于 42 而 3e2 等于 300。
请注意,如果我们有一个点,我们要么期望它后面跟着更多的数字/指数,要么什么都不跟着。然而,这是重要的部分,点是数字的一部分。请记住这一点,因为我们将着手查看点运算符 obj.prop 是如何处理的。
Section 11.2.1, Property Accessors描述了成员访问的点和括号表示法:
MemberExpression . IdentifierName
CallExpression 用于函数调用,我们不关心。请注意我们如何期待 MemberExpression(可以是 DecimalLiteral - 但不要相信我的话,看看我是否正确)。
看到那个小点了吗?向前跳并说“好吧,这里的方案中有一个点……4.foo 中有一个点……所以为什么会出现错误?”是合乎逻辑的。唉,我假想的 friend ,我用他来写这些句子,你忘记了 DecimalLiteral 是什么样子的!让我们看两个例子,看看会发生什么。
42.foo
^
插入符号代表我们所在的 Angular 色。到目前为止,我们在 DecimalLiteral/DecimalIntegerLiteral/NonZeroDigit 中(这太啰嗦了)。让我们转到下一个字符:
42.foo
^
仍然是数字的一部分,一个完全有效的 DecimalDigit。
42.foo
^
好的,我们已经完成了 DecimalIntegerLiteral 部分。这是该方案的相同图表:
DecimalIntegerLiteral . DecimalDigits(opt) ExponentPart(opt)
^
所以我们在一个点上,这是一个数字中完全有效的部分。现在我们使用它,作为数字的一部分,然后继续:
42.foo
^
f 既不是 DecimalDigits 的一部分,也不是 ExponentPart 的一部分,我们现在没有数字了。所以现在怎么办?那是什么f?它不是任何东西的一部分。也许它是一个属性访问器?我们来看看方案:
MemberExpression . IdentifierName
^
我们肯定在 MemberExpression 上,但我们没有跟在它后面的点 - 该点已经是数字的一部分。我们遇到了一个语法错误:我们停止执行并抛出它。希望你不住在玻璃房子里。
希望您现在明白为什么 42..foo 有效。一旦我们离开 MemberExpression,我们就会面对另一个点:
42..foo
^
MemberExpression . IdentifierName
^
后跟完全合法的IdentifierName。
当然,还有其他几种方法可以将点与数字分开。如您所示,一种方法是将文字括在括号中:(42).foo。当我们到达括号末尾时,我们就在 MemberExpression 之外,并且在点上。另一种方法是插入一个空格:42 .foo,因为空格不能作为数字的一部分,而且它对解析器是中性的,所以不会引发错误。
关于javascript - 调用数字字面量的成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18555853/
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
我正在尝试用ruby中的gsub函数替换字符串中的某些单词,但有时效果很好,在某些情况下会出现此错误?这种格式有什么问题吗NoMethodError(undefinedmethod`gsub!'fornil:NilClass):模型.rbclassTest"replacethisID1",WAY=>"replacethisID2andID3",DELTA=>"replacethisID4"}end另一个模型.rbclassCheck 最佳答案 啊,我找到了!gsub!是一个非常奇怪的方法。首先,它替换了字符串,所以它实际上修改了
对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我需要一些关于TDD概念的帮助。假设我有以下代码defexecute(command)casecommandwhen"c"create_new_characterwhen"i"display_inventoryendenddefcreate_new_character#dostufftocreatenewcharacterenddefdisplay_inventory#dostufftodisplayinventoryend现在我不确定要为什么编写单元测试。如果我为execute方法编写单元测试,那不是几乎涵盖了我对create_new_character和display_invent
目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非