说一说JavaScript有几种方法判断变量的类型? instanceof的实现原理:验证当前类的原型prototype是否会出现在实例的原型链__proto__上,只要在它的原型链上,则结果都为true。 instanceof验证当前类方法函数的原型prototype是否会出现在实例对象的原型链隐式原型——proto——上,只要它在原型链上,则结果都为true
利用对象属性key排除重复项,遍历数组,每次判断对象中是否存在该key属性,不存在就存储在新数组中,并且吧数组元素作为key,设置一个值,存储在对象中,最后返回新数组,
得分点 对象属性、new Set() 、indexOf、hasOwnProperty、reduce+includes、filter 标准回答 第一种方法:利用对象属性key排除重复项:遍历数组,每次判断对象中是否存在该属性,不存在就存储在新数组中,并且把数组元素作为key,设置一个值,存储在对象中,最后返回新数组
- 深浅拷贝。
- 浅拷贝 新建一个内存指针,指向原有的内存地址,不创建新的内存地址,拿人手短。
- 深拷贝 新建一个内存指针,新建一个内存地址,吧对象变量的所有属性方法都全部拷贝了,自食其力,
解题思路 typeof instancepf Object.prototype.tostring.call()
typeof:常用于判断基本数据类型,对于引用数据类型除了function返回’function‘,其余全部返回’object'。typeof判断基本数据类型,对于引用数据类型除了function 其余全部返回object
得分点 typeof、instanceof、Object.prototype.toString.call()(对象原型链判断方法)、 constructor (用于引用数据类型) 标准回答 JavaScript有4种方法判断变量的类型,分别是typeof、instanceof、Object.prototype.toString.call()(对象原型链判断方法)、 constructor (用于引用数据类型) typeof:常用于判断基本数据类型,对于引用数据类型除了function返回’function‘,其余全部返回’object'。 instanceof:主要用于区分引用数据类型,检测方法是检测的类型在当前实例的原型链上,用其检测出来的结果都是true,不太适合用于简单数据类型的检测,检测过程繁琐且对于简单数据类型中的undefined, null, symbol检测不出来。 constructor:用于检测引用数据类型,检测方法是获取实例的构造函数判断和某个类是否相同,如果相同就说明该数据是符合那个数据类型的,这种方法不会把原型链上的其他类也加入进来,避免了原型链的干扰。 Object.prototype.toString.call():适用于所有类型的判断检测,检测方法是Object.prototype.toString.call(数据) 返回的是该数据类型的字符串。 这四种判断数据类型的方法中,各种数据类型都能检测且检测精准的就是Object.prototype.toString.call()这种方法。 加分回答 instanceof的实现原理:验证当前类的原型prototype是否会出现在实例的原型链__proto__上,只要在它的原型链上,则结果都为true。因此,instanceof 在查找的过程中会遍历左边变量的原型链,直到找到右边变量的 prototype,找到返回true,未找到返回false。 Object.prototype.toString.call()原理:Object.prototype.toString 表示一个返回对象类型的字符串,call()方法可以改变this的指向,那么把Object.prototype.toString()方法指向不同的数据类型上面,返回不同的结果
说一说JS数据类型有哪些,区别是什么?
解题思路
得分点
Number、String、Boolean、BigInt、Symbol、Null、Undefined、Object、8种
一.构造函数和普通函数的三个不同点
1、构造函数也是一个普通函数,创建方式与普通函数一样(构造函数习惯上首字母大写)。
2、构造函数和普通函数的主要区别在于:调用方式不一样。作用也不一样(构造函数用来新建实例对象)
3、调用方式不一样。
a. 普通函数的调用方式:
直接调用 child();
b.构造函数的调用方式:
需要使用new关键字来调用 new Child();
二.构造函数的函数名与类名相同:Child() 这个构造函数,Child 既是函数名,也是这个对象的类名。(这一点和java的构造方法类似)
三.内部用this 来构造属性和方法
1、存储位置不同
cookie的数据信息存放在客户端浏览器上。cokkie客户端 单个小于等于4kb,最多保存20个,ascii字符串二进制数据Unicode字符形式存储可以设置有效期,支持跨域名访问
session的数据信息存放在服务器上。session服务器,任何类型的数据,关闭浏览器消失 不支持跨域名访问 2、存储容量不同 堆是先进先进 栈是先进后出
单个cookie保存的数据<=4KB,一个站点最多保存20个Cookie。
对于session来说并没有上限,但出于对服务器端的性能考虑,session内不要存放过多的东西,并且设置session删除机制。
3、存储方式不同
cookie中只能保管ASCII字符串,并需要通过编码方式存储为Unicode字符或者二进制数据。
session中能够存储任何类型的数据,包括且不限于string,integer,list,map等。
4、隐私策略不同
cookie对客户端是可见的,别有用心的人可以分析存放在本地的cookie并进行cookie欺骗,所以它是不安全的。
session存储在服务器上,对客户端是透明对,不存在敏感信息泄漏的风险。
5、有效期上不同
开发可以通过设置cookie的属性,达到使cookie长期有效的效果。
session依赖于名为JSESSIONID的cookie,而cookie JSESSIONID的过期时间默认为-1,只需关闭窗口该session就会失效,因而session不能达到长期有效的效果。
6、服务器压力不同
cookie保管在客户端,不占用服务器资源。对于并发用户十分多的网站,cookie是很好的选择。
session是保管在服务器端的,每个用户都会产生一个session。假如并发访问的用户十分多,会产生十分多的session,耗费大量的内存。
7、浏览器支持不同
假如客户端浏览器不支持cookie:
cookie是需要客户端浏览器支持的,假如客户端禁用了cookie,或者不支持cookie,则会话跟踪会失效。关于WAP上的应用,常规的cookie就派不上用场了。
运用session需要使用URL地址重写的方式。一切用到session程序的URL都要进行URL地址重写,否则session会话跟踪还会失效。
假如客户端支持cookie:
cookie既能够设为本浏览器窗口以及子窗口内有效,也能够设为一切窗口内有效。
session只能在本窗口以及子窗口内有效。
8、跨域支持上不同
cookie支持跨域名访问。
session不支持跨域名访问。