JavaScript有哪些数据类型,它们的区别是?
JS的八种数据类型:undefined、null、boolean、number、String、object、ES6新增了一种数据类型:(Symbol)这种类型的对象永不相等,即便创建的时候传入相同的值也不相等
主要用于解决属性名冲突问题
谷歌也出现了一种: Biglnt 指的是安全存储,操作大整数
所以js数据类型包含了以上八种 undefined String Object Number Null Boolean Symbol bigInt
栈:基本数据类型:undefined、null、boolean、number、string
堆:引用数据类型,(对象,数组和函数)object array function
1. 这五种基本类型可以直接访问,他们是按照值进行分配的,存放在栈内存中的简单数据段,数据大小确定,内存空间大小可以分配
2.引用类型即存放在堆内存中的对象,变量实际保存的是一共指针,这个指针指向另一个位置
null和undefined区别:
null 只有一个值,是null,不存在的对象,表示一个空对象指针
undefined只有一个值,是undefined。没有初始化。undefined是从null中派生出来的
简单理解就是:undefined是没有定义的,null是定义了但是为空!
数据类型检测的方式有哪些?
1.typeof 检测数据类型的运算符
typeof value 返回值首先是一个字符串,里面包含了对应的数据类型: number、string、boolean、undefined、object、function
只能判断原始值 number、string,判断引用类型 object null 这些结果都是object,判断不了
2.instanceof 检测某一个实例是否属于某一个类 检测是原型
判断不了基本数据类型 number、string,可以判断引用数据类型 object array function
3. constructor(慎用!)
constructor这个属性存在构造函数的原型链上的属性,指向构造函数,可以通过直接访问查看构造函数上的__proto__直接查看所属类型。
4.Object.prototype.toString.call( ) (推荐!!!)
判断数组的方式有哪些?
1. instanceof
2. 使用Array对象的isArray方法判断
3. Object.prototype.toString.call( )
typeof和null的结果是什么
typeof和null的结果:object
instanceof操作符的实现原理及实现
instanceof判断构造函数的prototype属性是否出现在对象的原型链中
用于测试构造函数的prototype属性,是否出现在对象的原型链中的任何位置。
new操作符的实现原理?
1. 创建一个新的空对象
2. 设置原型,将对象的原型设置为函数的prototype对象
3. 让函数的this指向这个对象,执行构造函数的代码(为这个新对象添加属性)
4. 判断函数的返回值类型,如果是值类型,返回创建的对象,如果是引用类型,返回引用类型的创建对象
function factory() { let newObject = null; let constructor = Array.prototype.shift.call(arguments); let result = null; // 判断参数是不是一个函数 if (typeof constructor !== 'function') { console.log('typeof error'); return; } // 新建一个空对象,对象是原型是构造函数的prototype对象 newObject = Object.create(constructor.prototype); // 将this指向新建对象 并执行函数 result = constructor.apply(newObject, arguments); // 判断返回对象 let flag = result && (typeof result === 'Object' || typeof result === 'function'); // 判断返回结果 return flag ? result : Object }
数组有哪些原生方法?
pop:删除并返回数组最后一个元素(改变原数组);
push:返回添加完成后的数组的长度(改变原数组);
shift:移除并返回数组的第一个元素(改变原数组);
unshift:在数组头部插入一个元素
slice:slice(下标,个数)返回裁剪后的数组(不改变原数组);
splice:插入,删除或替换数组的元素
concat:合并数组返回组合数组(不改变原数组);
join:将数组用标识符链接成字符串返回拼接好的字符串(不改变原数组);
reverse:翻转数组(改变原数组);
toString:将数组转换成一个字符串;
split:把字符串分割开,以数组方式储存;
forEach:主要用于遍历数组;
every:主要用于检查数组中每个元素是否符合函数的条件,如果其中有一个不符合,则返回false;;
indexOf:主要用于在数组中查找元素,并把元素的位置返回来。;
转自:https://blog.csdn.net/weixin_47002866/article/details/118180068
什么是BOM和DOM ?
1.dom是文档对象模型,可以把浏览器当成一个容器,是对里面的内容进行操作的
2.bom是浏览器对象模型,是对浏览器本身进行操作 核心对象是window
3. 区别如下图: