基本数据类型:1、Number、2、String、3、Boolean、4、null、5、undefined、6、Symbo、7、BigInt
引用数据类型:Function、Object对象、Array数组
回答:Object.prototype.toString 和typeof ,例如Object.prototype.toString.call(1)如果是数字,返回的就是object number,如果是字符串返回的就是object String
判断方法 :type of 和 Object.prototype.toString
第一个种方法是声明函数function 函数名
第二种是函数表达式var 函数名=function
第三种是函数对象的方式var 函数名=new function
1、利用字面量创建对象 var o = {}
2、利用new Object创建对象 var obj = new Object ()
3、利用构造函数创建对象
原生对象
“独立于宿主环境的 ECMAScript 实现提供的对象”
包含:Object、Function、Array、String、Boolean、Number、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、Date、RegExp、Error、URIError
内置对象
开发者不必明确实例化内置对象,它已被内部实例化了
同样是“独立于宿主环境”。而 ECMA-262 只定义了两个内置对象,即 Global 和 Math
宿主对象
BOM 和 DOM 都是宿主对象。因为其对于不同的“宿主”环境所展示的内容不同。其实说白了就是,ECMAScript 官方未定义的对象都属于宿主对象,因为其未定义的对象大多数是自己通过ECMAScript 程序创建的对象
相等,只要值相等那么就是相等的,会进行数据类型转换,全等需要值和类型都相等才行
null 表示一个对象被定义了,值为“空值”,另外原型链的终点是null;
undefined 表示不存在这个值;如果变量被声明了,但没有赋值时,就等于 undefined;
如果调用函数时,应该提供的参数没有提供,该参数也等于 undefined
1、函数没有返回值,或者返回值为空,出现undefined
2、声明变量未赋值
3、引用没有提供实参函数形参的值
4、获取对象中不存在的属性
通过 ES6 中的 Array.isArray 或者通过 instanceof 来识别 ,判断是否是数组;
通过调用 constructor 来识别,数组或者对象;
通过 Object.prototype.toString.call 方法来识别,数组或对象
1、遍历递归(要是在问 就说 判断遍历的是不是数组 如果是调用本身)
2、利用数组转字符串,和字符串转数组的方法arr.toString().split(',')把[1,[2,[3,[4,[5,6]]]]]转换成
如果是简单的对象里面没有复杂的function,那么就用 JSON.stringify() 转化一下,然后比较
如果是复杂的就用递归的方式
强制转换:
转化成字符串 toString() String()
转换成数字 Number()、 parseInt()、 parseFloat()
转换成布尔类型 Boolean()
隐式类型转换:拼接字符串例子 var str = "" + 18(- * / % ==)
伪数组:和数组类似,具有length属性,能用for循环进行遍历,但是无法调用数组的很多方法,比如push、pop等方法。
伪数组转化为真实的数组
1.使用 Arrray.from()--ES6
2.[ ].slice.call(eleArr) 或则 Array.prototype.slice.call(eleArr)
3、扩展运算符[...arr]
一般记得for...in就可以
1、遍历自身可枚举的属性 (可枚举,非继承属性) Object.keys() 方法,该方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中的属性名的排列
顺序和使用 for..in 遍历该对象时返回的顺序一致(两者的区别是 for ..in 还会枚举其原型 链上的属性 )
2、遍历自身的所有属性(可枚举,不可枚举,非继承属性) Object.getOwnPropertyNames()
方法,该方法返回一个由指定对象的所有自身属性组成的数组(包括不可枚举属性但不包括Symbol 值作为名称的属性)
3、遍历可枚举的自身属性和继承属性遍历对象的属性(可枚举,可继承的属性) for in
可以用addeventlistenter给按钮绑定多个click事件
false 是冒泡,默认为false,true为捕获