Js手写面试题第四天
前言
❓有任何疑问都可以私信我解答
⚡️仓库地址:https://gitee.com/super_li_yu/jsexamdemo
📌每天4道Js面试题,打卡第四天。(今天不一样)
😛建议关注,持续更新。
✒️今天重点:基础面试题10题
内容
1. 什么要有同源策略
- 同源策略指的是:协议,域名,端口相同,同源策略是一种安全协议
- 举例说明:比如一个黑客程序,他利用
Iframe
把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,他的页面就可以通过Javascript
读取到你的表单中input
中的内容,这样用户名,密码就轻松到手了。
2.offsetWidth/offsetHeight,clientWidth/clientHeight与scrollWidth/scrollHeight的区别
offsetWidth/offsetHeight
返回值包含content + padding + border,效果与e.getBoundingClientRect()相同clientWidth/clientHeight
返回值只包含content + padding,如果有滚动条,也不包含滚动条scrollWidth/scrollHeight
返回值包含content + padding + 溢出内容的尺寸
3. Js中如何定义对象
- 对象字面量:
var obj = {};
- 构造函数:
var obj = new Object();
- Object.create():
var obj = Object.create(Object.prototype);
4. JS的基本数据类型和引用数据类型
- 基本数据类型:
undefined
、null
、boolean
、number
、string
、symbol
- 引用数据类型:
object
、array
、function
5. Js有哪些内置对象
Object
是JavaScript
中所有对象的父对象- 数据封装类对象:
Object
、Array
、Boolean
、Number
和String
- 其他对象:
Function
、Arguments
、Math
、Date
、RegExp
、Error
6. Js中有几种类型的值
- 栈:原始数据类型(
Undefined
,Null
,Boolean
,Number
、String
) - 堆:引用数据类型(对象、数组和函数)
- 两种类型的区别是:存储位置不同;
- 原始数据类型直接存储在栈(
stack
)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储; - 引用数据类型存储在堆(
heap
)中的对象,占据空间大、大小不固定,如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其 - 在栈中的地址,取得地址后从堆中获得实体
7. eval的作用
- 它的功能是把对应的字符串解析成
JS
代码并运行 - 应该避免使用
eval
,不安全,非常耗性能(2
次,一次解析成js
语句,一次执行) - 由
JSON
字符串转换为JSON对象的时候可以用eval,var obj =eval('('+ str +')')
8. null,undefined的区别
undefined
表示不存在这个值。undefined
:是一个表示"无"的原始值或者说表示"缺少值",就是此处应该有一个值,但是还没有定义。当尝试读取时会返回undefined
- 例如变量被声明了,但没有赋值时,就等于
undefined
null
表示一个对象被定义了,值为“空值”null
: 是一个对象(空对象, 没有任何属性和方法)- 例如作为函数的参数,表示该函数的参数不是对象;
- 在验证
null
时,一定要使用===
,因为==
无法分别null
和undefined
9. null为什么是对象
null有时会被当作一种对象类型,即对null执行typeof null是,会返回object
原理是这样的,不同的对象在底层都表现为二进制,在JavaScript中,二进制前3位入宫为0的话,就会被判断为Object类型,null的二进制表示是全0,自然前三位也是0,所以执行
typeOf
是会返回"object".
10. 如何使用JS判断一个数组
-
instanceof方法
instanceof
运算符是用来测试一个对象是否在其原型链原型构造函数的属性
var arr = [];
arr instanceof Array; // true
-
constructor方法
constructor
属性返回对创建此对象的数组函数的引用,就是返回对象相对应的构造函数
var arr = [];
arr.constructor == Array; //true
- 最简单的方法
- 这种写法,是
jQuery
正在使用的
- 这种写法,是
Object.prototype.toString.call(value) == '[object Array]'
// 利用这个方法,可以写一个返回数据类型的方法
var isType = function (obj) {
return Object.prototype.toString.call(obj).slice(8,-1);
}
ES5
新增方法isArray()
var a = new Array(123);
var b = new Date();
console.log(Array.isArray(a)); //true
console.log(Array.isArray(b)); //false