将对象、字符串转为数组常用的几种方法有:
1. [].slice.call(对象名、数组名);
2. Array.from(对象名、数组名);
看着很简单的样子,但是实际操作很容易就掉坑里了!!!我就是从坑里爬出来才来写的这篇博客!说多了都是泪,不费话了,看下面的例子:
var myJson = {
name : "张三",
age : 21,
sex : "男"
}
上面的代码是绝壁正确的,语法也没有任何错误,但你会发现无论使用[].slice.call(对象名、数组名); 还是 Array.from(对象名、数组名); 拿到的都是空数组!这就是所说的坑,这两个东西有个隐性要求,对象中必须要有 length 键值对,其余 键名 还必须是数字。
var myJson = {
length : 2,
0 : 1,
1 : "a"
}
心想我就用字符当键名行不行呢?!!
var Json = {
length : 2,
"z" : 1,
1 : 2
}
分别是console.log([].slice.call(Json)); console.log(Array.from(Json)); 的结果。
显而易见。。。胳膊是拗不过大腿的
再来看 字符串转数组
var str2 = "123456"
console.log([].slice.call(str2));
console.log(Array.from(str2));
结果好生令人感动,字符串转数组还是很圆滚的。
那么,还有就是参数转为数组
function fn() {
var temp = [].slice.call(arguments);
console.log(temp);
}
fn(1,2,3,"a","se");
也是那么的圆滚,记住 参数中的字符串要用引号引起来 这一点就好了!
第二大专题
JSON.stringify(); 把对象字符化 和 JSON.parse(); 把字符对象化
之所以要将对象字符化,是因为有些地方这会给你显示一个[Object object],但你想让他显示对象内容就要将其字符化了。
比如:alert(obj); alert某对象时就会显示[Object object]。
但当你 alert(JSON.stringify(obj)); 时,就会显示对象里面的 键值对 了。
JSON.parse(); 也是有严格的语法要求!!!注意了,有是一个坑。。一不小心掉进去都不知道为毛会这样
var str = '{"a":1,"b":2}';
语法要求: 整个字符串用 单引号,字符串里面对象的 键 用双引号