Contents

JavaScript是动态类型语言,就是指变量类型不是稳定的,是可以随时改变的
变量声明如果不赋值,则类型为undefined
JavaScript一共有六种数据类型,分别书number数字类型,string字符串类型,Boolean布尔值 null空 undefined 和object对象
可以用typeof来判断变量的数据类型
注意,typeof NaN // number
NaN是指not a number 一个特殊数值 与任何数运算都是NaN
但是如果没有定义变量值,则为undefined 如 typeof v //undefined
Instanceof 也可以判断数据类型,同时他可以区分数组和对象
Instanceof a[] is Array //true
typeof null //object 因为历史遗留问题,null一开始并不是单独的数据类型,属于object的一种,所以判断null的类型会是object
Number(undefined) // NAN

布尔值为false的有: undefined null false 0 “”(空字符串)
注意[] {}空数组和空对象都是true!

JavaScript数字都是64位浮点数
所以
image
为了解决这个问题可以使用toFixed()
如:
image

如果小数点前面有21位数或者后面有五个零,js会换成科学计数法
对于八进制,十六进制,二进制会默认转为十进制
0o 0O八进制 0x、0X十六进制 0b、0B二进制

Infinity表示“无穷”
0 / 0 // NaN
1 / 0 // Infinity
非0数值除以0,会返回Infinity
Infinity大于一切数值(除了NaN),-Infinity小于一切数值(除了NaN)。Infinity与NaN比较,总是返回false
0乘以Infinity,返回NaN;0除以Infinity,返回0;Infinity除以0,返回Infinity。
Infinity与null计算时,null会转成0,等同于与0的计算。

判断NaN更可靠的方法是,利用NaN为唯一不等于自身的值的这个特点,进行判断。

function myIsNaN(value) {
return value !== value;
}

采用函数表达式声明函数时,function命令后面不带有函数名。如果加上函数名,该函数名只在函数体内部有效,在函数体外部无效。
函数可以调用自身,这就是递归(recursion)

function fib(num) {
if (num === 0) return 0;
if (num === 1) return 1;
return fib(num - 2) + fib(num - 1);
}

fib(6) // 8
in不能判断传过来的属性值,用hasOwnProperty()

Contents