typeof map[Symbol.iterator] === ‘function’ 到底是什么?
typeof是一个操作符,它的作用是返回一个值的数据类型。例如:
typeof 'hello'; // 'string'
typeof 123; // 'number'
typeof true; // 'boolean'
typeof [1, 2, 3]; // 'object'
typeof {name: '小姐姐'}; // 'object'
typeof null; // 'object'
typeof undefined; // 'undefined'
typeof function(){}; // 'function'
常见的数据类型有:undefined、boolean、number、string、bigint(ES6中新增的大整数类型)、symbol(ES6中新增的原始数据类型)和 object(包括数组、对象、null等)。
在一个对象后面加上中括号,表示访问该对象的一个属性或方法。例如:
var obj = {
name: '小明',
age: 18
};
console.log(obj['name']); // '小明'
console.log(obj['age']); // 18
等同于:
var obj = {
name: '小明',
age: 18
};
console.log(obj.name); // '小明'
console.log(obj.age); // 18
function也是一个数据类型。它和其他数据类型一样,可以作为变量的值、可以作为对象的属性和数组的元素。例如:
var func = function(){
console.log('我是一只小函数~');
}
var obj = {
sayHi: function(){
console.log('大家好,我是对象里的一只小函数~');
}
};
var arr = [
function(){console.log('我是数组里的一只小函数~')},
function(){console.log('我也是数组里的一只小函数~')}
]
最后来说一下上述代码。map[Symbol.iterator]表示获取map对象的一个名为Symbol.iterator的属性(这是ES6中用于定义迭代器的一种新的方式)。typeof map[Symbol.iterator] === 'function’则表示判断map对象是否具有iterator方法,并且该方法是否为一个函数。因为在JS中函数也是一种数据类型,因此可以用typeof来判断是否为函数。这句代码的作用就是对一个对象进行判断,看看它是否具有可迭代性。如果是,那么我们就可以对这个对象进行迭代操作。
参考:ES总结