1. 对象没有 length 属性
2.Array.prototype.slice.call(obj) 能将具有 length 属性的对象转成数组, 不带 length 属性的对象, 只能声明数组去转换
- <!DOCTYPE html>
- <HTML lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
- <title>
- Document
- </title>
- </head>
- <body>
- <script>
- // 1. 对象没有 length 属性
- // Array.prototype.slice.call(obj) 能将具有 length 属性的对象转成数组, 不带 length 属性的对象, 只能声明数组去转换
- let obj = {
- 0 : 'a',
- 1 : 'b',
- 2 : 'c',
- length: 3
- };
- let obj1 = {
- 0 : 'a',
- 1 : 'b',
- 2 : 'c'
- };
- let arr = Array.from(obj); // ['a','b','c'];
- var arr2 = [];
- for (var i in obj) {
- arr2.push(obj[i]);
- }
- var arr3 = Array.prototype.slice.call(obj) console.log(arr, arr2, arr3);
- // 会输出 undefined, 因为对象是没有 length 属性的.
- // console.log(obj1.length);
- function test(a, b, c, d) {
- var arg = Array.prototype.slice.call(arguments, 1);
- alert(arg);
- }
- test("a", "b", "c", "d"); //b,c,d
- // 通用的转化数组的方法
- var toArray = function(s) {
- if (s.length) {
- return Array.prototype.slice.call(s);
- } else {
- var arr = [];
- for (var i in s) {
- arr[i] = s[i];
- //or
- // arr.push(s[i]);
- }
- return arr;
- }
- }
- console.log(toArray(obj1));
- var t = {
- id: 2,
- name: "zain",
- sex: '男'
- };
- console.log(toArray(t));
- console.log(t['name'], t.name);
- </script>
- </body>
- </HTML>
来源: http://www.bubuko.com/infodetail-2846800.html