1

大家。

前几天面试官问了我一个问题。而我无法回答。可能在这个网站上存在一些大师 JS。=)

我们只有一个字符串:一个字符的VARNAME[byte][byte][byte][byte] 位置[byte]

问题:如果十六进制中的对 [byte][byte]必须不超过十进制的 1000,如何正确编写 JS ?

我试过以下

1)VARNAME[20][3D][09][30] 相等

2)VARNAME<space>=1<space> 它是正确的JS代码但是!

3)0x203D = 8253十进制不正确必须<=1000 0x0120 = 2352不正确必须<=1000!

我尝试在 09 上替换 20,然后:

0x093d = 2365比较好,不过1000多=(

我怎么能做到?面试官说这是可能的,因为 char 可以是任何(我的意思是

varname;<space><space><space>等等),但他不能告诉我答案。

大伙儿谁能做到?

4

1 回答 1

0

所描述的问题没有答案。

正如您所指出的,在变量引用之后可以出现在表达式上下文中的最低代码点将\u0009导致值大于 1000 (>= 2304)。ECMAScript 5 规范要求 JavaScript 环境在遇到无效字符时生成早期错误。此处唯一合法的字符是标识符连续字符或InputElementDiv,它可以是WhitespaceLineTerminatorCommentTokenDivPunctuator,它们都不允许该范围内的代码点\u0000-\u0003这是问题得到答案所必需的。

有一些环境会在\u0000遇到 a 时终止解析(C 字符串结尾字符),但在这方面不符合 ES5。

JavaScript 允许任何字符出现在这个位置的说法是完全错误的。

如果 VARNAME 在字符串或正则表达式中,这一切都会改变,但是,它们都可以在\u0000-范围内使用字符\u0003。如果这是面试官正在寻找的伎俩,我只能说这是一个不公平的问题。

请记住,在面试中,您对公司的面试与公司对您的面试一样多,甚至更多。对于加入一家认为这样的问题是可以在面试中使用的有效问题的公司,我会持严重的保留意见。

于 2013-10-18T16:52:41.137 回答