logo头像

求知若渴,虚心若愚

JavaScript常见面试题(一)

今天给大家整理一些前端开发中常见的JavaScript面试题。

1. JavaScript中的深拷贝和浅拷贝

1.1 浅复制

  • 对于字符串类型,浅复制是对值的复制
  • 对于对象来说,浅复制是对对象地址的复制,并没 有开辟新的栈
  • 浅复制的结果是两个对象指向同一个地址,修改其中一个对象的属性,则另一个对象的属性也会改变

    1.2 深复制

  • 深复制则是开辟新的栈,两个对象对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。
  • 深复制实现方式:
    • 通过递归解析解决
    • 通过JSON解析解决

1.3 注意事项

  • jQuery的extend可以深拷贝也可以浅拷贝
  • jQuery.extend第一个参数可以是布尔值,用来设置是否深度拷贝的
  • 如果对象比较大,层级也比较多,深复制会带来性能上的问题

2. 怎么清空一个数组

  • 直接改变arrayList所指向的对象,原对象并不改变。 arrayList = [];
  • 这种方法通过设置length=0 使原数组清除元素。 arrayList.length = 0;
  • 和方法2相似
    arrayList.splice(0, arrayList.length);

3. 怎么ajax解决跨域问题

  • 先说跨域原因:源于同源策略,协议+主机名+端口号 相同,才允许相互访问
  • 方法1:服务端添加响应头,允许跨域
    • addHeader(‘Access-Control-Allow-Origin:*’);//允许所有来源访问
    • addHeader(‘Access-Control-Allow-Method:POST,GET’);//允许访问的方式
  • 方法2:JSONP
    • 利用script标签的src属性,利用回调函数callback来取值
  • 方法3:服务器设置代理
    • 由于跨域是浏览器的同源策略造成的,对于服务器后台不存在该问题,服务器设置代理解决跨域

4. jsonp的原理

  • 动态添加一个script标签,而script标签的src属性是没有跨域的限制的
  • 本地创建一个脚本script,用src指向第三方API地址
  • 提供一个回调函数来接收数据
  • 第三方响应的json数据会被包装到回调函数的参数中
  • 浏览器调用callback函数,并传递解析后json对象为参数
  • 本地通过callback拿到参数,也就是返回的数据

5. 登录页input兼容问题

  • h5页面有个很蛋疼的问题就是,当输入框在最底部,点击软键盘后输入框会被遮挡。
  • 可以使用这个api,在点击input的时候调用即可scrollIntoView
  • 如果切换输入法,由于不同输入法高度不同,又会出现被遮挡问题。由于无法捕获切换输入法的事件,因此可以开一个计时器,不断执行sscrollintoview即可。
  • input其实还有许多兼容问题,包含一些样式兼容

6. 字符串常用方法

  • str.charAt(index); 返回子字符串,index为字符串下标,index取值范围[0,str.length-1]
  • str.charCodeAt(index); 返回子字符串的unicode编码,index取值范围同上
  • String.fromCharCode(num1,num2,…,numN); 根据unicode编码返回字符串
  • str.indexOf(searchString,startIndex); 返回子字符串第一次出现的位置,从startIndex开始查找,找不到时返回-1
  • str.lastIndexOf(searchString,startIndex); 从由往左找子字符串,找不到时返回-1
  • 截取字符串
    • str.substring(start,end); 两个参数都为正数,返回值:[start,end) 也就是说返回从start到end-1的字符
    • str.slice(start,end); 两个参数可正可负,负值代表从右截取,返回值:[start,end) 也就是说返回从start到end-1的字符
  • 字符串分割成数组:str.split(separator,limit); 参数1指定字符串或正则,参照2指定数组的最大长度
  • str.replace(rgExp/substr,replaceText) 返回替换后的字符串
  • str.match(rgExp); 正则匹配
支付宝打赏 微信打赏

赞赏是对我们的肯定!