1.什么是 javaScript?
javascript 是一个基于对象和事件驱动并具有相对安全性的客户端脚本语言
2.javaScript 与 ECMAScript 的关系
javascript 是 ECMAScript 的表现 ECMAScript 是 javaScript 的规范
3.变量的命名规则?
- 由字母和数字,下划线,$组成,不能以数字开头
- 不能重复命名
- 不能使用关键字和保留字
- 见名之义,使用驼峰标志
4.window.onload 的作用
window.onload 等文档和资源都加载完毕后调用的事件,保证js获取元素的时候,已经加载
5.js 数据类型
- 基本数据类型
- Number
- Boolean
- String
- Null
- Undefined
- 复杂数据类型
- Object
- Array
- Function
6.null 和 undefined 的区别
- null 是访问一个不存在对象返回的值,代表一个空对象
- undefined 是访问一个已经声明还没有赋值的变量返回的值,表示一个空变量
7.运算符的种类
- 算术运算符
- 逻辑运算符
- 比较运算符
- 三目运算符
- 赋值运算符
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
- 自己定义
- 运算错误 在本来应该是数字的地方不是数字或者无法转换为数字
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 怎么添加,移除,移动,复制,创建和查找节点
- 获取
- 获取子节点
- 父节点.children
- 父节点.childNodes
- 获取父节点
- 子节点.parentNode
- 子节点.offsetParent
- 添加
- 父节点.appendChild(子节点)
- 父节点.insertBefore(newChlid,refChlid)
- 创建
- document.createElement("标签名")
- document.createTextNode("文本内容")
- 复制
- 被复制的节点.cloneNode(true)
- 替换
- 父节点.replaceChlid(newChlid,refChlid)
- 删除
- 父节点.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 的利弊
优点:极高的扩展性
和可用性
- 通过良好的编程,控制保存在cookie中的session对象的大小
- 设置cookie的生命期,使之不会永远有效,这样偷盗者很可能拿到一个过期的cookie
- cookie中存储不敏感信息,即使被盗也不会有重大损失
- 通过加密和安全传输技术(SSL),减少cookie被破解的可能性
缺点
- 安全性问题,cookie在被拦截时,偷盗者可以得到所有的session信息,即使加密也于事无补,他不需要知道cookie的意义是什么,只需要原样转发cookie就可以达到目的
- cookie的数量和长度的限制,每个domain最多只能存储20条cookie,每个cookie只有4kb,多余的就会被截掉
- 有些状态不可能保存在客户端。例如为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么他起不到任何作用
29.new 操作符具体干了什么呢?
- 先创建了一个新的空对象
- 然后让这个空对象的_proto_指向函数的原型prototype
- 将对象作为函数的this传进去,如果return出来东西是对象的话,就直接返回return的内容,没有的话就返回创建的这个对象
30.call()和 apply()的区别
call()和apply()它们都是用来改变this指向 它们的区别在于传值的过程中会有些区别 call(this指向,参数1,参数2...) apply(this指向,[参数1,参数2...])
31.javaScript 对象的几种创建方式
- 字面量创建
- 实例创建
- 原型创建
- 工厂模式创建
- 构造函数创建
- 混合创建
32.JavaScript 原型,原型链?
js每声明一个function时,都会有一个prototype,它是函数中的一个默认属性,由js编译器自动添加的,里面存储着对象共享的属性和方法 原型链就是创建一个函数对象时,内部会有一个链表关系,创建foo对象,包含一个_proto_属性,而这个属性指向了prototype,从而实现对象的扩展
33.什么是闭包,闭包有什么作用,说说你对闭包的理解
闭包就是能够读取其他函数内部变量的函数(函数里面套函数,内部函数访问外部函数变量) 本质上来说闭包就是将内部函数和外部函数连接起来的桥梁 作用:闭包中使用的变量会一直存储在内存中,类似全局变量,避免全局污染,可以解决全局变量的问题
34.创建 ajax 的过程
- 创建一个XMLHttpRequest对象,就是一个异步调用函数
- 创建一个新的HTTP请求,并指定这个HTTP请求的方法,URL,验证信息
- 设置相应HTTP请求状态变化的函数
- 发送HTTP请求
- 获取异步调用返回的数据
- 使用javasript和DOM实现局部刷新
35.ajax 请求的时候 get 和 post 方式的区别,什么时候用 post
- get 请求会将参数跟在URL后进行传递,而post请求则是作为HTTP消息的尸体内容发送给WEB服务器的。当然,在Ajax请求中,这种区别对用户是不可见的
- get传输数据容量小,不安全,post传输数据内容大,更加安全 当向服务端发送一些数据的时候使用post比较安全
36.同步和异步的区别
同步: 浏览器向服务端请求数据时,可以做其他的事情 异步: 浏览器向服务端传请求数据时,不可以做其他的事情