相关疑难解决方法(0)

在JavaScript中使用toString

我正在阅读Douglas Crockford的JavaScript:The Good Parts,我正处于定义淡入淡出功能的地步.部分代码归结为:

var level = 1;
var hex = level.toString(16);
Run Code Online (Sandbox Code Playgroud)

所以我在浏览器的控制台中运行它以查看我得到的内容....

var level = 1;
level.toString(16);
Run Code Online (Sandbox Code Playgroud)

嘿,它返回" 1"...... Fabuloso!Wunderbar酒吧!

然后,为了厚颜无耻,我试着看看我得到了什么......

1.toString(16);
Run Code Online (Sandbox Code Playgroud)

我明白了

SyntaxError:意外的标记ILLEGAL

什么是什么?如果level变量等于1,并且在该级别上运行此方法工作正常,那么为什么不在实际的数字1上运行此方法呢?我尝试了一种与该toPrecision()方法类似的实验,并且在两种情况下均可正常工作.这是什么问题?这是JavaScript实现中的另一个固有缺陷,还是我错过了什么?我正在Google Chrome中测试.

相关:Stack Overflow问题为什么数字文字不能访问Number方法?.

javascript

17
推荐指数
1
解决办法
1801
查看次数

为什么像`toString`这样的方法在数字后需要两个点?

什么是背后的逻辑42..toString()..

双点工作并返回字符串"42",而42.toString()单个点失败.

同样,42...toString()三个点也失败了.

谁能解释这种行为?

console.log(42..toString());
Run Code Online (Sandbox Code Playgroud)

console.log(42.toString());
Run Code Online (Sandbox Code Playgroud)

javascript

9
推荐指数
1
解决办法
553
查看次数

为什么2..toString()有效?

为什么2..toString()返回22.toString()会抛出此错误?

例:

console.log(2..toString()); // prints 2

// Firefox throws the error
// `SyntaxError: identifier starts immediately after numeric literal`
console.log(2.toString());

var x = 2;
console.log(x.toString()); // prints 2

// Firefox throws the error
//`TypeError: XML descendants internal method called on incompatible Number`
console.log(x..toString());
Run Code Online (Sandbox Code Playgroud)

javascript

8
推荐指数
3
解决办法
1416
查看次数

为什么42.toString()在JS中失败?

放弃

伙计们,我DO知道为什么10..toString()的工作,但10.toString()不?问题存在,但问题是它没有提供正式的解释.

规范的解释.该特定位置的字符是小数.这由ECMAScript的数字文字语法定义.

没有参考标准是不够可信的

问题机构

我下意识地明白了

42..toString()
Run Code Online (Sandbox Code Playgroud)

解析器将其视为一个42.数字,然后是一个.toString()调用.

我无法理解的是为什么翻译无法实现这一点

42.toString()
Run Code Online (Sandbox Code Playgroud)

是一个42接着一个方法调用.

它只是现代JS解释器的缺点还是由ES5.1明确说明?

从ES5.1开始,Numeric Literal被定义为(仅是定义的重要部分):

NumericLiteral ::
    DecimalLiteral
    HexIntegerLiteral

DecimalLiteral ::
    DecimalIntegerLiteral . DecimalDigits(opt) ExponentPart(opt)
    . DecimalDigits ExponentPart(opt)
    DecimalIntegerLiteral ExponentPart(opt)
Run Code Online (Sandbox Code Playgroud)

最后一条规则是我希望解析器选择的规则.

UPD:澄清一下,这个问题希望作为ES规范的答案参考,明确说明解释器必须像它一样行事

javascript ecmascript-5

6
推荐指数
1
解决办法
588
查看次数

1 和 1.0 之间的差异

最近我发现这是完全有效的:

1..toString();  //"1"
Run Code Online (Sandbox Code Playgroud)

对我来说,一开始它看起来有点奇怪,但是通过进一步的探索,我发现它有效是因为浏览器将第一个1.视为数字。

这将我们引向了这个问题。如果我拨打.toString一个号码:

1.toString();  //SyntaxError
Run Code Online (Sandbox Code Playgroud)

它不会工作。但是,如果我这样做:

1.0.toString(); /*or*/ 1..toString();  //"1"
Run Code Online (Sandbox Code Playgroud)

有用。

为什么1和之间有区别1.0?我以为 JavaScript 中没有数字类型?为什么小数点很重要?

javascript

5
推荐指数
1
解决办法
1616
查看次数

3
推荐指数
1
解决办法
1091
查看次数

标签 统计

javascript ×6

ecmascript-5 ×1