问题标签 [language-specifications]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - “条件运算符”与“三元运算符”不一样吗?
关于C#,
据我了解,以下问题是错误的。意思是“三元运算符”和“条件运算符”。我对么?
问题#6:10 > 9?“10 大于 9”:“9 大于 10”是 _______ 的一个例子
- 三元运算符
- 条件运算符
- 大于运算符
- 逆算子
正确答案:三元运算符
http://www.tutorialsteacher.com/online-test/view-answer?test=csharp&que=6
javascript - 如何可靠地检测 JavaScript 中的奇异对象?
有什么方法可以可靠地确定 JavaScript 对象是否是外来对象类型,如果是,它的类型是什么?
通过“异国情调”,我的意思是(就这个问题而言)任何无法使用Object.create
. 这包括ES2016 规范定义为奇异的所有内容(任何“没有一个或多个基本内部方法的默认行为的对象”)以及由ObjectCreate规范方法创建的具有非空internalSlotsList的任何内容,以及任何类型的宿主对象。
通过“可靠”,我的意思是不会被对象添加/删除属性、使用Object.create
或Object.setPrototypeOf
赋予对象意外原型、修改对象的@@toStringTag 或构造函数的@@hasInstance 所欺骗。这对于需要正确处理任意用户数据的库函数很重要。
(这尤其意味着,instanceof
andObject.prototype.isPrototypeOf()
没有用。例如:var a = Object.create(Array.prototype)
制作一个看起来和闻起来像数组的东西——<code>a instanceof Array === true 并且a.push
按a.pop
预期工作——但缺乏神奇的行为.length
并且是很容易证明它不是一个真正的数组异国情调:Array.isArray(a) === false
。)
通过“类型”,我的意思大致是 ECMAScript 5.1 语言规范所指的 [[Class]] - 即,将具有特殊 [[DefineOwnProperty]] 行为的 Array 实例与普通对象分开的质量。
例子
有些情况很简单:
- 可以使用
Array.isArray(a)
. - 可以使用 可靠地检测函数
typeof f === 'function'
。- 但是有什么方法可以检测一个函数是绑定函数、本机函数还是闭包?
- 通过仔细应用原型对象中的方法,可以可靠地检测到其他一些奇异对象,例如
- 可以通过调用来检测集合
Set.prototype.has.apply(s, undefined)
,并查看它是否抛出 TypeError。
- 可以通过调用来检测集合
有没有一般的方法来进行这样的检测?
尤其是:
- 有什么通用的方法可以确定一个物体是普通的还是异国情调的?
- 有什么通用的方法来确定奇异物体的类型吗?
我注意到它Object.toString.apply(o)
曾经为此目的工作得相当好:尽管在许多浏览器中它会谎报宿主对象的类型,但对于 ES 5.1 规范中定义的所有类型,它可以可靠地告诉你对象是否是平原[object Object]
或异国情调[object <Type>]
。然而,在 ES6 及更高版本中,修改@@toStringTag
会破坏这个测试。
一种适用于任何符合 JS 实现的检测方法将是理想的,但特定于 Node.js 的方法仍然有用。
java - 为什么Java类文件格式缺少常量池标签2?
Java 1.0.2 的 JVM 规范列出了以下常量池条目类型:
随后的 JVM 规范添加了更多常量池条目类型,但从未填补“2”的位置。为什么那里有空隙?
java - 为什么是 Class.forName("BumpTest"),而不是 BumpTest.class?
在JLS Sec 8.4.3.6, synchronized
methods中,它说:
与以下效果完全相同:
这对我来说看起来很奇怪,更不用说过于复杂了:为什么使用Class.forName("BumpTest")
,而不是BumpTest.class
?不加载是不可能BumpTest
的,因为毕竟它正在执行该类的代码。照原样写,支票ClassNotFoundException
必须被抓住并吞下。
以这种方式写它有什么特别的原因吗?
c# - 如何有效地确保十进制值至少有 N 个小数位
在进行算术运算之前,我想有效地确保十进制值至少有 N 位(在下面的示例中 = 3)。
显然我可以使用 then parse 进行格式化"0.000######....#"
,但它的效率相对较低,我正在寻找一种避免与字符串相互转换的解决方案。
我尝试了以下解决方案:
Decimal.MaxValue - 1
在调试和发布版本中使用 Visual Studio 2015 编译时,这似乎适用于所有值 <= 。
但我怀疑编译器可能被允许优化 (1.000 - 1)。C# 规范中是否有任何内容可以保证这将始终有效?
还是有更好的解决方案,例如使用Decimal.GetBits
?
更新
跟进 Jon Skeet 的回答,我之前曾尝试添加0.000M
,但这在 dotnetfiddle 上不起作用。所以我很惊讶地看到它Decimal.Add(d, 0.000M)
确实有效。 这是一个 dotnetfiddle比较d + 000M
和decimal.Add(d,0.000M)
:结果与 dotnetfiddle 不同,但在使用 Visual Studio 2015 编译相同代码时相同:
因此,至少某些行为似乎是依赖于编译器的,这并不令人放心。
java - 使用 ? 时令人惊讶的 NullPointerException:
这里有点奇怪:
这将失败,NullPointerException
如果b1
并且b2
是错误的。但是这个:
b1
为假时不抛出 NPE 。
为什么是这样?
syntax - 官方 AutoIt 语言语法规范
我想为 AutoIt 创建一个编译器,将其编译为 x86 指令 - 但是,我无法找到 AutoIt 语言的官方语法描述(可能是 ANTLR-syntax-description 或官方语法树的形式) .
有人能指出我正确的方向吗?
https://www.autoitscript.com/autoit3/docs/有一个名为Language Reference的部分,但它更像是“如何”指南而不是正式的语言描述,我不知道它是否完整(我对 AutoIt 本身没有太多经验)。
java - 当简单名称和完全限定名称发生冲突时如何引用一个类
考虑以下病态示例:
在构造函数中创建的两个实例属于嵌套类。
但是我怎么能提到java.util.ArrayList
我们在同一个班级里都知道和喜爱的东西呢?我们不能导入它,也不能使用完全限定的名称,因为将使用嵌套的类符号。
在这种情况下我们能做什么?(除了显而易见的 - 停止为嵌套类使用这种肆无忌惮的邪恶名称)。
python - 与特定语言字符匹配的 Python 模式
从字符串列表中,我想提取所有单词并将它们扩展保存到一个新列表中。我使用以下形式的模式匹配成功地做到了这一点:
不幸的是,该语言包含特定于语言的字符,因此给定示例形式的字符串会产生:
我希望它产生:
我很感激有关如何解决此问题的建议。
java - 关于 Java 10 语法规范的困惑(FieldAccess 似乎是错误的)
我正在开发一些语法树同步工具,并尝试为一小部分 Java 编写解析器;我对 Java 10 语法规范感到困惑,并认为 的定义FieldAccess
是错误的。
在我看来, of 的语法FieldAccess
类似于obj.x
,其中obj
是一个标识符(或类似的东西)。
但似乎 for 的语法FieldAccess
不能产生obj.x
因为的定义Primary
是
其中两个非终结符都不能是Identifier
。
FieldAccess
我相信应该的语法是
PostfixExpression . Identifier
,非终结符'比'高一层'
在哪里:PostfixExpression
Primary
这样ExpressionName
最终可以根据需要生成标识符
谁能给我一些意见,或者告诉我一个合适的地方来报告这个问题?
我只能在 Java 平台的实现中找到报告错误的地方,而在语言规范中几乎找不到报告错误的地方。