前端出现频率较高的js面试题

相关知识点

数据类型、运算、对象、function、继承、闭包、作用域、原型链、事件、RegExp、JSON、Ajax、DOM、BOM、内存泄漏、跨域、异步加载、模板引擎、前端MVC、前端MVVM、路由、模块化、Http、Canvas、jQuery、ECMAScript 2015(ES6)、Node.js、AngularJS、Vue、React......

1、介绍一下 JS 的基本数据类型。

  • UndefinedNull、Boolean、NumberString


2、介绍一下 JS 有哪些内置对象。

  • Object 是 JavaScript 中所有对象的父对象
  • 数据封装类对象:Object、Array、Boolean、Number、String
  • 其他对象:Function、Argument、Math、Date、RegExp、Error


3、列举几条 JavaScript 的基本代码规范。

  • (1)不要在同一行声明多个变量
  • (2)如果你不知道数组的长度,使用 push
  • (3)请使用 ===/!== 来比较 true/false 或者数值
  • (4)对字符串使用单引号 ''(因为大多时候我们的字符串。特别html会出现")
  • (5)使用对象字面量替代 new Array 这种形式
  • (6)绝对不要在一个非函数块里声明一个函数,把那个函数赋给一个变量。浏览器允许你这么做,但是它们解析不同
  • (7)不要使用全局函数
  • (8)总是使用 var 来声明变量,如果不这么做将导致产生全局变量,我们要避免污染全局命名空间
  • (9)Switch 语句必须带有 default 分支
  • (10)使用 /**...*/ 进行多行注释,包括描述,指定类型以及参数值和返回值
  • (11)函数不应该有时候有返回值,有时候没有返回值
  • (12)语句结束一定要加分号
  • (13)for 循环必须使用大括号
  • (14)if 语句必须使用大括号
  • (15)for-in 循环中的变量应该使用 var 关键字明确限定作用域,从而避免作用域污染
  • (16)避免单个字符名,让你的变量名有描述意义
  • (17)当命名对象、函数和实例时使用驼峰命名规则
  • (18)给对象原型分配方法,而不是用一个新的对象覆盖原型,覆盖原型会使继承出现问题
  • (19)当给事件附加数据时,传入一个哈希而不是原始值,这可以让后面的贡献者加入更多数据到事件数据里,而不用找出并更新那个事件的事件处理器


4、call和apply的作用是什么?区别是什么?

  • call和apply的功能基本相同,都是实现继承或者转换对象指针的作用;
  • 唯一不通的是前者参数是罗列出来的,后者是存到数组中的;
  • call或apply功能就是实现继承的;与面向对象的继承extends功能相似;但写法不同;
  • 语法:
  • .call(对象[,参数1,参数2,....]);//此地参数是指的是对象的参数,非方法的参数;
  • .apply(对象,参数数组)//参数数组的形式:[参数1,参数2,......]


5、push()-pop()-shift()-unshift()分别是什么功能?

  • push 方法
  • 将新元素添加到一个数组中,并返回数组的新长度值。
  • var a=[1,2,3,4];
  • a.push(5);
  • pop 方法
  • 移除数组中的最后一个元素并返回该元素。
  • var a=[1,2,3,4];
  • a.pop();
  • shift 方法
  • 移除数组中的第一个元素并返回该元素。
  • var a=[1,2];
  • alert(a.shift());
  • unshift 方法
  • 将指定的元素插入数组开始位置并返回该数组。


6、表述您对javascript this工作原理的理解

  • 在函数中:this 通常是一个隐含的参数。
  • 在函数外(顶级作用域中):在浏览器中this 指的是全局对象;在Node.js中指的是模块(module)的导出(exports)。
  • 传递到eval()中的字符串:如果eval()是被直接调用的,this 指的是当前对象;如果eval()是被间接调用的,this 就是指全局对象。
  • 介绍一下 JavaScript 原型,原型链,它们有何特点?
  • 每个对象都会在其内部初始化一个属性,就是prototype(原型),当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会有自己的prototype,于是就这样一直找下去,也就是我们平时所说的原型链的概念。
  • 关系:instance.constructor.prototype = instance.__proto__
  • 特点:JavaScript对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本,当我们修改原型时,与之相关的对象也会继承这一改变。
  • 当我们需要一个属性时,JavaScript引擎会先看当前对象中是否有这个属性,如果没有的话,就会查找它的prototype对象是否有这个属性,如此递推下去,一致检索到Object内建对象。
  • functionFunc(){}
  • Func.prototype.name = "Xiaosong";
  • Func.prototype.getInfo = function() {
  • return this.name;
  • }
  • var person = new Func();
  • console.log(person.getInfo());//"Xiaosong"
  • console.log(Func.prototype);//Func { name = "Xiaosong", getInfo = function() }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值