// console.log(0b111110111 === 503)
// console.log(0o767 === 503 )
// console.log(Number('0b111') )
// console.log(Number.isFinite(123))
// console.log(Number.isFinite('123'))
// console.log(isFinite('123'))
// console.log(Number.isNaN(123))
// console.log(Number.isNaN('NaN'))
// console.log(Number.isNaN(NaN))
// console.log(isNaN(NaN)) //true
// console.log(isNaN('NaN')) //false
// console.log(isNaN('123')) //false
// console.log(isNaN(undefined)) //true
// console.log(isNaN('undefined'))//true
// console.log(Number(undefined))//NaN
// console.log(Number(null)) //0
// console.log(Number(NaN)) //NaN
// console.log(0.1 + 0.2)
/**
* Math.trunc
* 获得数值的整数部分 非数值可以用Number先进行转化,否则返回NaN
*/
function myTrunc(x){
return x>0? Math.floor(x):Math.ceil(x);
}
// console.log(myTrunc(1.2));
// console.log(myTrunc(-90.2));
// let x='a'
// x=+x;
// console.log(x)
// console.log(isNaN(x))
function mySign(x){
x=+x;
if(x===0 || isNaN(x)){
return x
}
return x>0?1:-1;
}
// console.log(mySign(12))
// console.log(mySign(-12))
// console.log(mySign(0))
// console.log(mySign(-0))
// console.log(mySign(undefined))
// console.log(Number([])) //0
// console.log(Number({})) //NaN
//Number方法
// console.log(Number(NaN)); //NaN
// console.log(Number(null)); //0
// console.log(Number(undefined));//NaN
// console.log(Number('11'));//11
// console.log(Number('ABC'));//NaN
// console.log(Number([]));//0
// console.log(Number([1,2,3]));//NaN
// console.log(Number({}));//NaN
// console.log(Number([1]));//1
// console.log(Number(true));//1
// console.log(Number())//0
// console.log(Number(function(){return 1+1}))//NaN
// console.log(Math.hypot(3, 3, true)); // NaN
// console.log(typeof 123n)
// console.log(typeof 123)
// let p = 1n;
// for (let i = 1n; i <= 70n; i++) {
// p *= i;
// }
// console.log(1n+2n); // 1.197857166996989e+100
// function foo(x = 5) {
// let x = 1; // error
// const x = 2; // error
// }
// foo(11)
//果没有提供参数,函数foo的参数默认为一个空对象
function foo({x, y = 5}={}) {
console.log(x, y);
}
// foo({})
// foo({x:1,y:2})
// foo({x:1})
// foo()
// 写法一
function m1({x = 0, y = 0} = {}) {
return [x, y];
}
// 写法二
function m2({x, y} = { x: 0, y: 0 }) {
return [x, y];
}
// console.log(m2({}))
// console.log((function (a = 0, b, c) {}).length) // 0
// console.log((function (a, b = 0, c) {}).length) // 1
// console.log((function (a, b , c= 0) {}).length) // 2
let x = 1;
function f(y = x) {
let x = 2;
console.log(y);
}
// f() // 1
var x1=0;
function m12(){
x1+=2;
console.log(x1);
}
// m12();//2
// console.log(x1);//2
let x2=0;
function m12(){
x2=x2+2;
console.log(x2);
}
// m12(x2);//2
// console.log(x2);//0
// var x4 = 1;
// function foo(x4, y = function() { x4 = 2; }) {
// var x9= 3;
// console.log(x9,x4);
// y();
// console.log(x9,x4);
// }
// foo() // 3
// console.log(x4)
// > 3,undefined
// > 3,2
// > 1
// var x4 = 1;
// function foo(x4, y = function() { x4 = 2; }) {
// console.log(x4);
// var x4= 3;
// console.log(x4);
// y();
// console.log(x4);
// }
// foo() // 3
// console.log(x4)
// > undefined
// > 3
// > 3
// > 1
var x4 = 1;
function foo(x4, y = function() { x4 = 2; }) {
console.log(x4);//undefined
x4= 3;
console.log(x4);//3
y();
console.log(x4);//2
}
// foo()
// console.log(x4)//1
function throwIfMissing() {
throw new Error('Missing parameter');
}
//这表明参数的默认值不是在定义时执行,而是在运行时执行
function foo(mustBeProvided = throwIfMissing()) {
return mustBeProvided;
}
// foo()
// Error: Missing parameter
//这表明参数的默认值不是在定义时执行,而是在运行时执行
function foo(x,y,optional = undefined) {
console.log(x,y,optional)
}
foo(3,4)
console