相关疑难解决方法(0)

为什么0.-5评估为-5?

假设我写的0.50.-5在意想不到的方式,但它仍然可以运行.是什么0.0.-5这样做,它可以仍然可以运行,计算结果为-5?

我也试过alert(0.-5+1)打印-4,JavaScript忽略0.0.-5吗?

javascript numbers

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

调用数字文字的成员函数

我试图调用文字函数,但我得到了奇怪的行为.

考虑这个返回的代码true.

   23 === (23)
Run Code Online (Sandbox Code Playgroud)

当我写作尝试以下.

(23).toFixed(2)
Run Code Online (Sandbox Code Playgroud)

我得到了预期的结果_23.00_但是当我尝试时23.toFixed(2)我得到了这个错误.

SyntaxError:意外的标记ILLEGAL

JavaScript如何评估无法理解的表达式以及为什么会出现此错误?

javascript

48
推荐指数
3
解决办法
1494
查看次数

为什么数字文字不能访问Number方法?

如果查看ECMAScript 3规范,您将看到原始值类型Null和Undefined没有伴随Null和Undefined对象.

>> Null
ReferenceError: Null is not defined
Run Code Online (Sandbox Code Playgroud)

其他原始值类型Number,String和Boolean类型都有伴随的Number,String和Boolean对象,您可以从全局范围引用它们.

>>Number
function Number() { [native code] }
>>Boolean
function Boolean() { [native code] }
Run Code Online (Sandbox Code Playgroud)

这些原始值类型的目的是提供诸如toStringvalueOf它们各自的原始值类型的方法:

>>var n = 1;
>>n.toString();
"1" 
Run Code Online (Sandbox Code Playgroud)

是相同的

>>var n = 1;
>>Number.prototype.toString.call(n);
"1"
Run Code Online (Sandbox Code Playgroud)

布尔值和字符串也是这样工作的:

>>var b = true;
>>b.toString(); 
"true"
>>Boolean.prototype.toString.call(b);
"true"
Run Code Online (Sandbox Code Playgroud)

当您尝试混合类型时,您可以看到原始值对象正在使用其伴随对象的方法:

>>Boolean.prototype.toString.call(n); 
TypeError: Boolean.prototype.toString is not generic
>>Number.prototype.toString.call(b)
TypeError: Number.prototype.toString is not generic
Run Code Online (Sandbox Code Playgroud)

有趣的是,对于布尔和字符串文字类型,您可以直接从文字中调用这些方法:

>>true.toString();
"true"
>>Boolean.prototype.toString.call(true)
"true"
>>"moo".toString();
"moo"
>>String.prototype.toString.call("moo")
"moo"
Run Code Online (Sandbox Code Playgroud)

原始值为null和undefined,因为它们没有附带的Null和Undefined对象不能执行以下操作:

>>Null
ReferenceError: Null is not defined …
Run Code Online (Sandbox Code Playgroud)

javascript

27
推荐指数
2
解决办法
2474
查看次数

在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
查看次数

为什么JavaScript不允许您直接调用数字上的方法?

在Ruby中,您可以这样做:

3.times { print "Ho! " } # => Ho! Ho! Ho!
Run Code Online (Sandbox Code Playgroud)

我尝试用JavaScript做到这一点:

Number.prototype.times = function(fn) {
    for (var i = 0; i < this; i++) {
        fn();
    }
}
Run Code Online (Sandbox Code Playgroud)

这有效:

(3).times(function() { console.log("hi"); });
Run Code Online (Sandbox Code Playgroud)

事实并非如此

3.times(function() { console.log("hi"); });
Run Code Online (Sandbox Code Playgroud)

Chrome给了我一个语法错误:"意外的令牌ILLEGAL".为什么?

javascript

13
推荐指数
1
解决办法
409
查看次数

在JS中调用数字文字的函数有哪些规则?

自从我开始使用JS以来,我认为在数字文字上调用函数的唯一方法是通过用parens包装它来将它放在表达式位置,如下所示:

1.toString();
// SyntaxError: identifier starts immediately after numeric literal

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

今天,我想到尝试这个:

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

为什么这样做?指向官方规范的指针会很棒.

编辑歧义是我的第一个想法,但随后决定1.toString()两者都没有歧义.这比我初想的要深,但我仍然认为我是对的.原因如下:

属性名称可以以数字开头

var obj = { "1" : 1, "2" : 2 };
Run Code Online (Sandbox Code Playgroud)

以数字开头的属性名称只能用方括号引用

obj.1;
// SyntaxError: Unexpected token ILLEGAL
obj['1'];
// 1
Run Code Online (Sandbox Code Playgroud)

也:

1['toString']();
// '1'
Run Code Online (Sandbox Code Playgroud)

因此,1.任何非数字后跟始终是方法调用或属性访问,永远不是十进制数.同样,1.后跟任何数字将始终是十进制数字,从不进行方法调用或属性访问.

javascript

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

为什么这里的输出为0。var a = 7; a.constructor();

让我们看下面的例子:

Q1:为什么0这里输出?这是什么意思?

var a = 7;
console.log(a.constructor()); // prints 0 (Why?)
Run Code Online (Sandbox Code Playgroud)

问题2:何时typeof atypeof 7两者都是数字,为什么a.constructor()运行而7.constructor()没有?

var a = 7; 
var bool = typeof a === typeof 7;

console.log(a.constructor()); // 0
console.log((++a).constructor()); // 0

console.log(7.constructor()); // SyntaxError: Invalid or unexpected token
console.log(++a.constructor()); // ReferenceError: Invalid left-hand side expression in prefix operation
Run Code Online (Sandbox Code Playgroud)

javascript numbers

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

在数字文字上调用toFixed方法

当我在十进制数字文字上调用toFixed()方法时,如下所示:

var a = 67.678.toFixed(2);
console.log(a);
Run Code Online (Sandbox Code Playgroud)

结果有效并返回67.68

但是,如果我在整数上调用该方法 - 我会收到错误

var b = 67.toFixed(2);
console.log(b); // causes ERROR
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

注意:

如果我将整数保存到变量 - toFixed()方法确实有效.

var c = 67;
c = c.toFixed(2);
console.log(c); // returns 67.00
Run Code Online (Sandbox Code Playgroud)

看到这个jsBin

引擎盖下发生了什么?

javascript tofixed

2
推荐指数
1
解决办法
686
查看次数

javascript编号属性语法

可能重复:
为什么我不能使用单个点访问整数的属性?

我正在阅读一篇文章,并遇到了javascript toFixed方法的奇怪行为.我不明白最后一句话的原因.有人可以解释一下吗?

(42).toFixed(2);//"42.00" 好的

42.toFixed(2); // SyntaxError:标识符在数字文字后立即开始

42..toFixed(2);//"42.00" 这真的很奇怪

javascript syntax numbers

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

JavaScript(1)和1之间的歧义

(1)和1之间有什么区别.

1.toString() //Will throw error
1.toFixed(1) //Will throw error
(1).toString() // output "1"
(1).toFixed(1) // output 1.0
Run Code Online (Sandbox Code Playgroud)

javascript expression-evaluation javascript-engine

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

为什么2.valueOf()无效但(2).valueOf()是?

我猜的JavaScript将解析(2).valueOf()new Number(2).valueOf(),但为什么它不是第一个?

根据运算符优先级,分组运算符的优先级应高于成员访问权限https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

那么为什么(2)不首先进行评估2而不是被解析为屈服new Number(2)

javascript

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

为什么1..toString()工作并返回"1"但1.toSring()会导致语法错误?

我知道1不是对象,但是当我键入时1..toString(),它在控制台中返回"1".这是为什么?

在此输入图像描述

javascript

-2
推荐指数
1
解决办法
290
查看次数