1.js的数据类型
js基本有5种简单的数据类型:String,Number,Boolean,Null,Undefined
。
引用数据类型:Object,Array,Function
。
2.判断数据类型的方法
typeof
优点:能够快速区分基本数据类型
缺点:不能区分Object , Array , Null
,都返回object
console.log(typeof true); // boolean
console.log(typeof 'str'); // string
console.log(typeof undefined); // undefined
console.log(typeof []); // object
console.log(typeof {}); // object
console.log(typeof function(){}); // function
console.log(typeof null); // object
instanceof
优点:能够区分Array , object ,Function
,适合用于判断自定义的类的实例对象
缺点:Number , Boolean , String
不能判断
console.log(true instanceof Boolean); // false
console.log('str' instanceof String); // false
console.log([] instanceof Array); // true
console.log(function(){} instanceof Function); // true
console.log({} instanceof Object); // true
object.prototype.toString.call()
优点:精准判断数据类型
缺点:写法繁琐,建议封装后使用
var toString = Object.prototype.toString;
console.log(toString.call(true)); //[object Boolean]
console.log(toString.call('str')); //[object String]
console.log(toString.call([])); //[object Array]
console.log(toString.call(function(){})); //[object Function]
console.log(toString.call({})); //[object Object]
console.log(toString.call(undefined)); //[object Undefined]
console.log(toString.call(null)); //[object Null]
3.var , let , const 的区别
var:声明的变量,作用域为 该语句所在的函数内 , 存在变量提升。
let : 声明的变量,其作用域为 该语句所在的代码块内 , 不存在变量提升 。
(let为es6新添加申明变量的命令)
const 声明的变量不允许修改 。
4.js的作用域的理解
js的作用域分为 全局作用域 和 函数作用域 。函数作用域中定义的变量,只能在函数内部调用,外界无法访问,因为没有块级作用域导致 if , for
等逻辑语句中定义的变量可以被外部访问,因此 es6
中新增了 let
和 const
来进行块级作用域的申明 。
5. == 和 === 区别
== : 俩边类型不同时,要先进行类型转换,在比较
=== :不做类型转换,类型不同时不相等
console.log(null==undefined) //true
console.log(null===undefined) //false
undefined
值是派生自null
值的,ECMAScript标准规定对二者进行相等性测试要返回true
==类型转换过程:
- 类型不同,进行转换
null
与undefined
,返回truestring
与number
,将字符串转化为number
- 一方为
boolean
, 转为number
object
与string , number ,symbol
,转换为原始类型进行比较