зеркало из https://github.com/mozilla/gecko-dev.git
Bug 749818: add Number.isNaN, r=jwalden
--HG-- extra : rebase_source : f3faa700eb75c6106b0ebb421d53080e293b714a
This commit is contained in:
Родитель
6d98894d86
Коммит
e2c95974dc
|
@ -0,0 +1,15 @@
|
|||
assertEq(Number.isNaN(NaN), true);
|
||||
assertEq(Number.isNaN(0/0), true);
|
||||
assertEq(Number.isNaN(Number("NaN")), true);
|
||||
assertEq(Number.isNaN(4), false);
|
||||
assertEq(Number.isNaN(4.5), false);
|
||||
assertEq(Number.isNaN("hi"), false);
|
||||
assertEq(Number.isNaN("1.3"), false);
|
||||
assertEq(Number.isNaN("51"), false);
|
||||
assertEq(Number.isNaN(0), false);
|
||||
assertEq(Number.isNaN(-0), false);
|
||||
assertEq(Number.isNaN({valueOf: function () { return 3; }}), false);
|
||||
assertEq(Number.isNaN({valueOf: function () { return 0/0; }}), false);
|
||||
assertEq(Number.isNaN({ valueOf: function() { throw 17; } }), false);
|
||||
assertEq(Number.isNaN({ toString: function() { throw 17; } }), false);
|
||||
assertEq(Number.isNaN({ valueOf: function() { throw 17; }, toString: function() { throw 42; } }), false);
|
|
@ -836,6 +836,27 @@ static JSFunctionSpec number_methods[] = {
|
|||
JS_FS_END
|
||||
};
|
||||
|
||||
|
||||
// ES6 draft ES6 15.7.3.10
|
||||
static JSBool
|
||||
Number_isNaN(JSContext *cx, unsigned argc, Value *vp)
|
||||
{
|
||||
CallArgs args = CallArgsFromVp(argc, vp);
|
||||
if (args.length() < 1 || !args[0].isDouble()) {
|
||||
args.rval().setBoolean(false);
|
||||
return true;
|
||||
}
|
||||
args.rval().setBoolean(MOZ_DOUBLE_IS_NaN(args[0].toDouble()));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
static JSFunctionSpec number_static_methods[] = {
|
||||
JS_FN("isNaN", Number_isNaN, 1, 0),
|
||||
JS_FS_END
|
||||
};
|
||||
|
||||
|
||||
/* NB: Keep this in synch with number_constants[]. */
|
||||
enum nc_slot {
|
||||
NC_NaN,
|
||||
|
@ -998,6 +1019,9 @@ js_InitNumberClass(JSContext *cx, JSObject *obj)
|
|||
if (!JS_DefineConstDoubles(cx, ctor, number_constants))
|
||||
return NULL;
|
||||
|
||||
if (!DefinePropertiesAndBrand(cx, ctor, NULL, number_static_methods))
|
||||
return NULL;
|
||||
|
||||
if (!DefinePropertiesAndBrand(cx, numberProto, NULL, number_methods))
|
||||
return NULL;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче