function 0.1 + 0.2 != 0.3() {
// 首先声明这不是bug,原因在与十进制到二进制的转换导致的精度问题!其次这几乎出现在很多的编程语言中:
// C/C++,Java,Javascript中,准确的说:
// “使用了IEEE 754浮点数格式”来存储浮点类型(float 32,double 64)的任何编程语言都有这个问题
}
function 类数组() {
// 拥有length属性,其它属性(索引)为非负整数
// 不具有数组所具有的方法
// 类数组对象转化为数组
Array.prototype.slice.call(arguments)
Array.prototype.slice.call(arguments, 0)
[].slice.call (arguments)
[].slice.call (arguments, 0)
Array.from(arguments)
// 原生JavaScript转换
var length = arguments.length;
var arr = [];
for (var i = 0; i < length; i++) {
arr.push(arguments[i]);
return arr;
}
}
function 包装对象() {
// 为什么 string instanceof string返回false
// 在读取字符串的时候会创建一个对象,但是这个对象只是临时的,
// 所以我们称它为临时对象,学术名字叫包装对象,说它临时,
// 是因为我们在读取它的属性的时候,js会把这个string字符串通过new String()方式创建一个字符串对象,
// 一旦引用结束,这个对象就被销毁了。
}
function JavaScript如何判断一个对象是否为数组(){
1) arr instanceof Array返回true
2) arr.constructor == Array返回true
说明:使用instanceof和constructor判断数组类型的问题在于,它假定只有一个运行环境,如果网页中包含多个框架,
那么实际上存在两个以上不同的全局执行环境,进而存在两个不同版本的Array构造函数,
如果从一个框架向另一个框架传入一个数组,
那么传入的数组与第二个框架中原生创建的数组分别具有各自不同的构造函数,
也就是说,object.constructor == Array 会返回false。
原因:Array属于引用型数据,传递过程仅仅是引用地址的传递,
每个页面的Array原生对象所引用的地址是不一样的,
在子页面声明的Array所对应的构造函数,是子页面的Array对象,
父页面进行判断时使用的Array并不等于子页面的Array。
3) Array.isArray(arr)方法返回true
ES5新增了Array.isArray()方法,这个方法的目的是:最终确定一个值是否是数组,不管它是在哪个全局环境创建的。
4) Object.prototype.toString.call(arr) === "[object Array]"返回true,
这是最简单的判断一个对象是否为数组的方法
}