问题标签 [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.

0 投票
1 回答
383 浏览

c# - “条件运算符”与“三元运算符”不一样吗?

关于C#,

据我了解,以下问题是错误的。意思是“三元运算符”和“条件运算符”。我对么?

问题#6:10 > 9?“10 大于 9”:“9 大于 10”是 _______ 的一个例子

  • 三元运算符
  • 条件运算符
  • 大于运算符
  • 逆算子

正确答案:三元运算符

http://www.tutorialsteacher.com/online-test/view-answer?tes​​t=csharp&que=6

0 投票
1 回答
277 浏览

javascript - 如何可靠地检测 JavaScript 中的奇异对象?

有什么方法可以可靠地确定 JavaScript 对象是否是外来对象类型,如果是,它的类型是什么?

通过“异国情调”,我的意思是(就这个问题而言)任何无法使用Object.create. 这包括ES2016 规范定义为奇异的所有内容(任何“没有一个或多个基本内部方法的默认行为的对象”)以及由ObjectCreate规范方法创建的具有非空internalSlotsList的任何内容,以及任何类型的宿主对象。

通过“可靠”,我的意思是不会被对象添加/删除属性、使用Object.createObject.setPrototypeOf赋予对象意外原型、修改对象的@@toStringTag 或构造函数的@@hasInstance 所欺骗。这对于需要正确处理任意用户数据的库函数很重要。

(这尤其意味着,instanceofandObject.prototype.isPrototypeOf()没有用。例如:var a = Object.create(Array.prototype)制作一个看起来和闻起来像数组的东西——<code>a instanceof Array === true 并且a.pusha.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 的方法仍然有用。

0 投票
1 回答
224 浏览

java - 为什么Java类文件格式缺少常量池标签2?

Java 1.0.2 的 JVM 规范列出了以下常量池条目类型:

随后的 JVM 规范添加了更多常量池条目类型,但从未填补“2”的位置。为什么那里有空隙?

0 投票
1 回答
95 浏览

java - 为什么是 Class.forName("BumpTest"),而不是 BumpTest.class?

JLS Sec 8.4.3.6, synchronizedmethods中,它说:

与以下效果完全相同:

这对我来说看起来很奇怪,更不用说过于复杂了:为什么使用Class.forName("BumpTest"),而不是BumpTest.class?不加载是不可能BumpTest的,因为毕竟它正在执行该类的代码。照原样写,支票ClassNotFoundException必须被抓住并吞下。

以这种方式写它有什么特别的原因吗?

0 投票
2 回答
1440 浏览

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 + 000Mdecimal.Add(d,0.000M):结果与 dotnetfiddle 不同,但在使用 Visual Studio 2015 编译相同代码时相同:

因此,至少某些行为似乎是依赖于编译器的,这并不令人放心。

0 投票
1 回答
57 浏览

java - 使用 ? 时令人惊讶的 NullPointerException:

这里有点奇怪:

这将失败,NullPointerException如果b1并且b2是错误的。但是这个:

b1为假时不抛出 NPE 。

为什么是这样?

0 投票
0 回答
235 浏览

syntax - 官方 AutoIt 语言语法规范

我想为 AutoIt 创建一个编译器,将其编译为 x86 指令 - 但是,我无法找到 AutoIt 语言的官方语法描述(可能是 ANTLR-syntax-description 或官方语法树的形式) .

有人能指出我正确的方向吗?


https://www.autoitscript.com/autoit3/docs/有一个名为Language Reference的部分,但它更像是“如何”指南而不是正式的语言描述,我不知道它是否完整(我对 AutoIt 本身没有太多经验)。

0 投票
4 回答
940 浏览

java - 当简单名称和完全限定名称发生冲突时如何引用一个类

考虑以下病态示例:

在构造函数中创建的两个实例属于嵌套类。

但是我怎么能提到java.util.ArrayList我们在同一个班级里都知道和喜爱的东西呢?我们不能导入它,也不能使用完全限定的名称,因为将使用嵌套的类符号。

在这种情况下我们能做什么?(除了显而易见的 - 停止为嵌套类使用这种肆无忌惮的邪恶名称)。

0 投票
1 回答
54 浏览

python - 与特定语言字符匹配的 Python 模式

从字符串列表中,我想提取所有单词并将它们扩展保存到一个新列表中。我使用以下形式的模式匹配成功地做到了这一点:

不幸的是,该语言包含特定于语言的字符,因此给定示例形式的字符串会产生:

我希望它产生:

我很感激有关如何解决此问题的建议。

0 投票
0 回答
68 浏览

java - 关于 Java 10 语法规范的困惑(FieldAccess 似乎是错误的)

我正在开发一些语法树同步工具,并尝试为一小部分 Java 编写解析器;我对 Java 10 语法规范感到困惑,并认为 的定义FieldAccess是错误的。

在我看来, of 的语法FieldAccess类似于obj.x,其中obj是一个标识符(或类似的东西)。

但似乎 for 的语法FieldAccess不能产生obj.x

因为的定义Primary

其中两个非终结符都不能是Identifier

FieldAccess我相信应该的语法是
PostfixExpression . Identifier,非终结符'比'高一层'
在哪里:PostfixExpressionPrimary

这样ExpressionName最终可以根据需要生成标识符

谁能给我一些意见,或者告诉我一个合适的地方来报告这个问题?
我只能在 Java 平台的实现中找到报告错误的地方,而在语言规范中几乎找不到报告错误的地方。