Q:判断数据类型的几种方法
| type | value | 
|---|---|
| 基本类型 | string、number、boolean、undefined、null | 
| 引用类型 | Object | 
typeof
typeof ''  // string
typeof 123  // "number"
typeof false  // "boolean"
typeof abc  // "undefined"
typeof null  // "object"
typeof {}    // "object"
typeof []  // "object"
typeof function(){}  // "function"
constructor
var a = ''; a.constructor === String;  //  true
var a = 123; a.constructor === Number;  //  true
var a = false; a.constructor === Boolean;  //  true
([]).constructor === Array;  //  true
({}).constructor === Object;  //  true
(function(){}).constructor === Function;  //  true
(()=>{}).constructor === Function;  //  true
// 如果声明的变量值未定义(undefined)或者值为null,则会提示类型错误,Uncaught TypeError: Cannot read property 'contructor' of undefined (或null)
Object.prototype.toString.call()
function wt_type(o) {
  return Object.prototype.toString.call(o);
  // return Object.prototype.toString.call(o).match(/\[object (\S*)\]/)[1].toLowerCase();  //  转成小写字符类型
}
wt_type('123') === '[object String]';  //  true
wt_type(123) === '[object Number]';  //  true
wt_type(false) === '[object Boolean]';  //  true
wt_type() === '[object Undefined]';  //  true
wt_type(null) === '[object Null]';  //  true
wt_type(()=>{}) === '[object Function]';  //  true
wt_type(Symbol)  === "[object Function]";  // true
Array.isArray([1,2,3])  // true
Q:如何规避在严格模式下,ES6函数新特性造成的报错?
- 把要执行的函数包在一个立即执行函数内,在立即执行函数内运用严格模式:
const doSomeTh = (function(){
  'use strict'
  return function({a,b}){
    console.log(a,b)
  }
})();
- 在全局作用域设置严格模式:
// doSth.js
'use strict'
function add({a,b}){
  console.log(a+b)
}
未完待续。。。