热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【面试题】js面试题整理

1、js数据类型基本



1、js数据类型


  • 基本数据类型:undefined、null、number、boolean、string、symbol
  • 引用数据类型:object(function、array、date )

2、js数据类型的转换


  • 转换为布尔值-Boolean()
  • 转换为数字-Number() parseInt() parseFloat()
  • 转换为字符串-String() toString()
  • null和undefined没有.toString()方法

3、js数据类型的判断


  • typeof:对于原始数据类型来说,除了null都可以显示正确的类型— type 2
  • instanceof:可以争取的判断对象的类型— instanceof Number
  • constructor:如果更改原型就会变得不可靠
  • Object.prototype.toString.call() 使用object对象的原型方法toString,使用call来借用Object的toString方法

const c = Object.prototype.toString
c.call(2) "[object Number]"
c.call(null) "[object Null]"
c.call('1222') "[object String]"

4、null和undefined区别


5、{}和[]valueOf和toString结果是什么

const obj = {};
obj.valueOf() {}
obj.toString() "[object Object]"
const arr = [];
arr.valueOf() []
arr.toString() ""

6、Javascript的作用域和作用域链


  • 作用域:作用域是定义变量的区域,他有一套访问变量的规则,这套规则用来来管理浏览器引擎如何在当前作用域以及嵌套的作用域中根据变量进行变量查找;
  • 作用域链:作用域链的作用是保证对执行环境有权访问的所有变量和函数的有序访问,通过作用域链,我们可以访问到外层环境的变量和函数,当我们查找一个变量是,如果当前执行环境中没有找到,他就会顺着作用域链向后查找
  • 作用域链的本质是一个指向变量对象的指针列表。变量对象是一个包含了执行环境中所有变量和函数的对象。作用域链的前端始终都是当前执行上下文的变量对象。全局执行上下文的变量对象始终是作用域链的最后一个对象。

7、Javascript创建对象的几种方式


8、Javascript继承的几种实现方式


9、寄生组合继承的实现


10、谈谈对this的理解


11、call、apply、bind的理解


12、Javascript原型和原型链


13、js获取原型的方法


14、什么是闭包,为什么要使用它


  • 闭包是指有权访问另一个函数作用域内变量的函数,创建闭包的最常见方式就是在一个函数内部创建另一个函数,创建的函数可以访问到当前函数的局部变量
  • 闭包的用途:
    1)使我们在函数外部能够访问到函数内部的变量。通过使用闭包,我们通过在外部调用闭包函数,从而在外部访问到函数内部的变量,可以使用这种方法来创建私有变量;
    2)函数的另一个用途是使已经运行结束的函数上下文中的变量对象继续留在内存中。因为闭包函数保留了这个变量对象的引用,所以这个变量对象不会被回收

const a = () => {
var n = 0;
return function add() {
n++;
console.log(n);
}
}
const b = a();
b(); // 1
b(); // 2

17、Dom和Bom


  • Dom指的是文档对象模型,这个对象主要定义了处理网页内容方法的内容;
  • Bom指的是浏览器对象模型,这个对象主要定义了与浏览器进行交互的方法和核心,Bom的核心是window,window对象含有location对象,navigator对象、screen对象,并且Dom的最根本对象document对象也是Bom的window对象的子对象

18、事件委托


  • 事件委托本质上是利用了浏览器事件冒泡的机制,因此可以把子节点的监听函数定义在父节点上,由父节点的监听函数统一处理多个子元素的事件,这种方式就叫做事件代理;
  • 不必要为每一个子元素都绑定一个监听事件,减少内存消耗;
  • 可以动态的添加dom

19、事件传播


  • 当事件发生在dom元素上,该事件并不完全发生在那个元素上;
  • 事件传播有三个阶段:
    1)捕获阶段-事件从window开始,然后向下到每个元素,直到到达目标元素;
    2)目标阶段-事件已达到目标元素;
    3)冒泡阶段-事件从目标元素冒泡,然后上升到每个元素,直到window。

20、 Dom操作


21、js数组和字符串原生方法


22、常用的正则表达式

//(1)匹配 16 进制颜色值
var color = /#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})/g;
//(2)匹配日期,如 yyyy-mm-dd 格式
var date = /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;
//(3)匹配 qq 号
var qq = /^[1-9][0-9]{4,10}$/g;
//(4)手机号码正则
var phOne= /^1[34578]\d{9}$/g;
//(5)用户名正则
var username = /^[a-zA-Z\$][a-zA-Z0-9_\$]{4,16}$/;
//(6)Email正则
var email = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
//(7)身份证号(18位)正则
var cP = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
//(8)URL正则
var urlP= /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/;
// (9)ipv4地址正则
var ipP = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
// (10)车牌号正则
var cPattern = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/;
// (11)强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间)
var pwd = /^(?=.\d)(?=.[a-z])(?=.[A-Z]).{8,10}$/


推荐阅读
author-avatar
1個穷小子_969
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有