Javascript面试题整理

Javascript面试题整理

1.什么是 javaScript?

javascript 是一个基于对象和事件驱动并具有相对安全性的客户端脚本语言

2.javaScript 与 ECMAScript 的关系

javascript 是 ECMAScript 的表现 ECMAScript 是 javaScript 的规范

3.变量的命名规则?

  1. 由字母和数字,下划线,$组成,不能以数字开头
  2. 不能重复命名
  3. 不能使用关键字和保留字
  4. 见名之义,使用驼峰标志

4.window.onload 的作用

window.onload 等文档和资源都加载完毕后调用的事件,保证js获取元素的时候,已经加载

5.js 数据类型

  • 基本数据类型
    • Number
    • Boolean
    • String
    • Null
    • Undefined
  • 复杂数据类型
    • Object
    • Array
    • Function

6.null 和 undefined 的区别

  • null 是访问一个不存在对象返回的值,代表一个空对象
  • undefined 是访问一个已经声明还没有赋值的变量返回的值,表示一个空变量

7.运算符的种类

  1. 算术运算符
  2. 逻辑运算符
  3. 比较运算符
  4. 三目运算符
  5. 赋值运算符

8.var a =10;var b = a++;a,b 最后的结果是?

a= 11, b=10

9."=="与“===”的区别

  • == 是 相等,当进行比较的时候会隐式转换类型为 number 类型进行比较
  • ===是 恒等,严格相等,当进行比较的时候除了比较值还有类型

10.console.log(0.1+0.2==0.3)的输出结果及分析

false,在 js 中小数的运算容易有误差,所以不要使用小数运算作为判断条件

11.NAN 会在什么样的情况下出现呢?列举出现这样情况的代码

NAN not a number

  1. 自己定义
  2. 运算错误 在本来应该是数字的地方不是数字或者无法转换为数字

12.列举三种强制类型转换和 2 种隐式类型转换

  • 强制类型转换

    • Number("10") 转换为 number 类型
    • parseInt("20.5") 转换为number,取整
    • parseFloat("10.5") 转换为number,保留小数
    • String(10) 转换为 string 类型
    • toString(10) 转换为string类型
  • 隐式类型转换

  • "10"+20 加号遇到字符串变成连接符,20隐式转换为字符串

  • 1+true true隐式转换为1

  • 10 == "10""10"隐式转换为10

13.document.write()与 innerHTML 的区别

document.write()

  • 操作 body 中的内容
  • 会覆盖之前已经存在的内容,document.write()添加的内容会叠加 innerHTML
  • 操作闭合标签的内容
  • 覆盖之前的所有内容

14.谈谈你对 this 的理解

  • 在全局中this是window对象
  • 对象的方法中this是对象本身
  • 在普通函数中this是window
  • 在事件处理函数中this是触发事件的元素

15.说说你对作用域链的理解

作用域是变量和函数的使用范围 作用域链是Js中的一种查找机制,在当前作用域查找,如果没有找到,就往上一个作用域查找,如果还没有,就在往上找,一直找到最外层,如果找不到则是is not define

17.下面代码执行完以后的结果为?

var x=1,y=x=0;
function add(n){
    n = n+1;
}
y=add(x);
function add(n){
    n = n+3;
}
z=add(x);
console.log(x,y,z)
复制代码

x 是 1,y 是 undefined,z 是 undefined 因为 x 作为实参传给了 add 函数,但是函数并没有进行 return,y 和 z 没有得到返回值,所以是 undefined

18.请解释变量提升

浏览器解析代码至少会经过两个过程,预解析和逐步执行 变量提升是将变量声明提升到代码最前面,然后在逐步执行代码

19.函数声明和函数表达式声明的区别

函数声明可以变量提升 函数表达式不可以变量提升

20.javaScript 两种变量范围有什么不同?

javascript 两种变量范围一种是全局变量,一种是局部变量

  • 全局变量是函数外声明,在任何地方都额能被修改和访问,会一直存储在内存中
  • 局部变量,函数内声明,只能在函数内使用的变量,出了函数就会被销毁

21.定时器的分类?它们的区别及用法是什么?

  • setInterve 定时器 每隔固定时间执行一次 适用于轮播图,倒计时
  • setTimeout 延迟器 延迟一段事件只执行一次 适用于广告弹窗

22.js 有哪些对象

  • 全局对象
    • window
  • 内置对象
    • Global(全局window,document)
    • Math
  • 原生对象
    • date
    • number
    • string
    • null
    • undefined
    • boolean
  • 宿主对象
    • DOM
    • BOM

23.数组方法 pop() push() unshift() shift()

  • pop() 在数组末尾处删除一个元素,返回被删除的元素
  • push() 在数组末尾处添加一个或多个元素,返回当前数组的下标
  • unshift() 在数组头部添加或删除元素,返回当前数组下标
  • shift() 在数组头部删除一个元素,返回被删除的元素

24.DOM 怎么添加,移除,移动,复制,创建和查找节点

  1. 获取
  • 获取子节点
    • 父节点.children
    • 父节点.childNodes
  • 获取父节点
    • 子节点.parentNode
    • 子节点.offsetParent
  1. 添加
  • 父节点.appendChild(子节点)
  • 父节点.insertBefore(newChlid,refChlid)
  1. 创建
  • document.createElement("标签名")
  • document.createTextNode("文本内容")
  1. 复制
  • 被复制的节点.cloneNode(true)
  1. 替换
  • 父节点.replaceChlid(newChlid,refChlid)
  1. 删除
  • 父节点.removeChlid(子节点)
  • 节点.remove()

25.什么是 window 对象?什么是 document 对象?

window 对象是 js 中最大的对象,表示窗口,包含 documnet documnet 是文档对象,表示 HTML

26.offsetWidth,clientWidth,scrollTop 的区别

  • offsetWidth 占位宽 表示内容宽+左右 Padding+左右 border
  • clientWidth 可视宽 表示内容宽+左右 padding
  • scrollTop 页面被卷进去的高度

27.如何获取 url 地址中搜索内容

window.location.search

28.cookie 的利弊

优点:极高的扩展性可用性

  1. 通过良好的编程,控制保存在cookie中的session对象的大小
  2. 设置cookie的生命期,使之不会永远有效,这样偷盗者很可能拿到一个过期的cookie
  3. cookie中存储不敏感信息,即使被盗也不会有重大损失
  4. 通过加密和安全传输技术(SSL),减少cookie被破解的可能性

缺点

  1. 安全性问题,cookie在被拦截时,偷盗者可以得到所有的session信息,即使加密也于事无补,他不需要知道cookie的意义是什么,只需要原样转发cookie就可以达到目的
  2. cookie的数量和长度的限制,每个domain最多只能存储20条cookie,每个cookie只有4kb,多余的就会被截掉
  3. 有些状态不可能保存在客户端。例如为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么他起不到任何作用

29.new 操作符具体干了什么呢?

  1. 先创建了一个新的空对象
  2. 然后让这个空对象的_proto_指向函数的原型prototype
  3. 将对象作为函数的this传进去,如果return出来东西是对象的话,就直接返回return的内容,没有的话就返回创建的这个对象

30.call()和 apply()的区别

call()和apply()它们都是用来改变this指向 它们的区别在于传值的过程中会有些区别 call(this指向,参数1,参数2...) apply(this指向,[参数1,参数2...])

31.javaScript 对象的几种创建方式

  1. 字面量创建
  2. 实例创建
  3. 原型创建
  4. 工厂模式创建
  5. 构造函数创建
  6. 混合创建

32.JavaScript 原型,原型链?

js每声明一个function时,都会有一个prototype,它是函数中的一个默认属性,由js编译器自动添加的,里面存储着对象共享的属性和方法 原型链就是创建一个函数对象时,内部会有一个链表关系,创建foo对象,包含一个_proto_属性,而这个属性指向了prototype,从而实现对象的扩展

33.什么是闭包,闭包有什么作用,说说你对闭包的理解

闭包就是能够读取其他函数内部变量的函数(函数里面套函数,内部函数访问外部函数变量) 本质上来说闭包就是将内部函数和外部函数连接起来的桥梁 作用:闭包中使用的变量会一直存储在内存中,类似全局变量,避免全局污染,可以解决全局变量的问题

34.创建 ajax 的过程

  1. 创建一个XMLHttpRequest对象,就是一个异步调用函数
  2. 创建一个新的HTTP请求,并指定这个HTTP请求的方法,URL,验证信息
  3. 设置相应HTTP请求状态变化的函数
  4. 发送HTTP请求
  5. 获取异步调用返回的数据
  6. 使用javasript和DOM实现局部刷新

35.ajax 请求的时候 get 和 post 方式的区别,什么时候用 post

  • get 请求会将参数跟在URL后进行传递,而post请求则是作为HTTP消息的尸体内容发送给WEB服务器的。当然,在Ajax请求中,这种区别对用户是不可见的
  • get传输数据容量小,不安全,post传输数据内容大,更加安全 当向服务端发送一些数据的时候使用post比较安全

36.同步和异步的区别

同步: 浏览器向服务端请求数据时,可以做其他的事情 异步: 浏览器向服务端传请求数据时,不可以做其他的事情

分类:
阅读
标签: