前端面试题(JS part 1):

229 阅读5分钟

1,http和https的区别?

http是超文本传输协议,信息是明文传输,不安全; https则是具有安全性的ssl加密传输协议.
http的端口是80,https的端口是443.

2,浏览器输入url之后发生了什么?

进行地址解析,解析出来字符串地址中的主机,域名,端口,参数等.->
根据DNS解析解析出来的IP地址,寻找目标服务器.->
与服务器建立TCP连接,发送http请求,服务器处理请求,服务器返回相应结果,关闭TCP连接->
浏览器接受到响应码开始处理并渲染页面.

**3,输入框会使用的事件?
**

focus->keydown->input->keyup->change->blur

4,eval是做什么用的?

它的功能是把对应的字符串解析成JS代码并运行; 避免使用eval,不安全,耗性能.

**5,什么是window对象,什么是document对象?
**

window对象是指浏览器打开的窗口,document对象是指window对象的一个属性.

6,null和undefined的区别?

null表示声明了一个变量,并且它的值为空.undefined表示声明了一个变量,但是没有赋值.
null的类型是object, undefined的类型是undefined.

7,JS中的"use strict"是什么意思?使用它的区别是什么?

use strict是ES5中添加的雅阁模式,使用它能消除JS语法中的一些不合理,不严谨之处.
如:不能变量提升,不能声明同名变量,import/export/class等一些保留名不能作为变量名.等..

8,JS中,有一个函数,执行对象查找时,永远不会去查找原型,这个函数是?

hasOwnProperty->Obj.hasOwnProperty(name)

9,说说对JSON的理解?

JSON是一种轻量级的数据交换格式,它是基于JS的一个子集.数据是个简单,易于读写.
key需要用""括起来.
JSON字符串转换为JSON对象: JSON.parse(str);JSON对象转化为JSON字符串:JSON.stringify(obj).

10,JS延迟加载的方式?

动态创建script标签,当页面的全部内容加载完毕后,在执行创建挂载。
    <script>
      function loadJS() {
        let element = document.createElement("script")
        element.src = "download.js"
        document.body.appendChild(element)
      }
      if(window.addEventListener) {
        window.addEventListener("load", loadJS, false)
      }else if(window.attachEvent) {
        window.attachEvent("onload", loadJS)
      }else {
        window.onload = loadJS
      }
    </script>

在script标签上,设置async属性,可以达到异步加载js文件的目的。
1async属性只对外部文件有效,对本地js文件没有效果。
2async属性是遇到scirpt标签开始通知浏览器异步下载,下载完毕之后,就可以立即执行。
3async设置的js文件不是按照顺序的。

当外部加载js文件时,将js脚本放在最后,当全部的文件都加载完成后,再开始加载执行js脚本。

11,判断 js 类型的方式

1. tyeof
可以判断出’string’,‘number’,‘boolean’,‘undefined’,‘symbol’但判断 typeof(null) 时值为 ‘object’; 判断数组和对象时值均为 ‘object2. instanceof原理是 构造函数的 prototype 属性是否出现在对象的原型链中的任何位置function A() {}
let a = new A();
a instanceof A //true,因为 Object.getPrototypeOf(a) === A.prototype;
3. Object.prototype.toString.call()常用于判断浏览器内置对象,对于所有基本的数据类型都能进行判断,即使是 null 和 undefined4. Array.isArray()用于判断是否为数组

11,列举几种强制类型转换和隐式类型转换

强制:parseInt()/parseFloat()/Number()
隐式: == / !=

12,split()和join()

split()把字符串分割成数组;join()将数组转化成字符串.

13,数组pop/push/unshift/shift的简述

push尾部添加 unshift头部添加
pop尾部删除 shift头部删除

14,事件绑定和普通事件的区别

1,普通添加事件的方法:
var btn = document.getElementById('id');
btn.onclick = function(){alert('1')};
btn.onclick = function(){alert('2')};
执行上面代码只会输出'2'
2,事件绑定
var btn = document.getElementById('id');
btn.addEventListener("click",function(){alert('1')},false);
btn.addEventListener("click",function(){alert('2')},false);
执行上面代码先输出'1',在输出'2'

普通添加事件的方法不支持添加多个事件,最下面的事件会覆盖上面的事件.而事件绑定可以添加多个事件.
普通事件无法取消,事件绑定可以通过removeEventListener()去取消.

15,JS的数据类型有哪些?

基本数据类型:string/number/null/undefined/boolean/symbol
引用数据类型: object

16,call()和apply()的区别是什么?

call()/apply()可以直接调用函数,并且可以改变函数内this的指向,
call(this的指向,a,b,c)可以传多个参数,apply(this的指向,[a,b,c])传两个参数.

17,闭包的概念?优缺点?

闭包的概念:闭包就是能读取其他函数内部变量的函数.
优点:避免全局变量的污染希望一个变量长期存储在内存中(缓存变量)缺点:内存泄露(消耗)常驻内存,增加内存使用量

18,new之后干了什么?

1,创建一个新对象.
2,新对象的__proto__属性指向构造函数的原型对象(prototype).
3,绑定this给新对象.
4,执行构造函数内部的代码,将属性添加给新对象的this.
5,返回新对象.

19,ES6新增了什么?

1,新增了块级作用域(let/const)
2,提供了定义类class
3,新增了一种数据类型 symbol
4,新增了箭头函数,函数参数允许设置默认值,引入了rest参数
5,新加了import/export处理模块化
6,增加了promise来处理异步操作
7,增加了结构赋值