JavaScript面试

1.介绍js的基本数据类型
Undifined、Null、Boolean、Number、String
ECMAScript 2015 新增:Symbol(创建后独一无二不可变的数据类型)
2.介绍js有哪些内置对象
Object是javascript中所有对象的父对象
其他对象:Function、Arguments、Math、Date、RegExp、Error
3.说几条写Javascript的基本规范
不要在同一行声明多个变量
请使用===/!==来比较true/false或者数值
使用对象字面量替代new Array这种形式
不要使用全局函数
switch语句必须带有default分支
for循环必须使用大括号
for-in循环中的变量 应该使用var关键字明确限定作用域,从而避免作用域污染
4.javascrpit原型、原型链?有什么特点
每个对象都会在其内部初始化一个属性,就是prototype(原型),当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会有自己的prototype,于是就这样一直找下去,也就是我们平常所说的原型链
关系:instance.constructor.prototype=instance.proto
特点:
JavaScript对象通过引用来传递,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与此相关的对象也会继承这一改变。
当我们需要一个属性时,JavaScript引擎会先看当前对象中是否有这个属性,如果没有的话,就会查找它的prototype对象是否有这个属性,如此递推下去,一直检索到object内建对象。
5.JavaScript有几种类型的值?画一下它们的内存图
栈:原始数据类型(undefined、null、boolean、number、string)
堆:引用数据类型(对象、数组和函数)
两种类型的区别是:存储位置不同;
原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放在栈中存储;
引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定。如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体
6.如何将字符串转化为数字,例如‘12.3b’
*parseFloat(‘12.3b’)
7.JavaScript如何实现继承?
构造继承、原型继承、实例继承、拷贝继承
8.JavaScript创建对象的几种方式?
对象字面量的方式:
person={firstname:“Mark”,lastname;“Yun”};
用function来模拟无参的构造函数
function Person();
var person=new Person();
person.name=”Mark”;
person.age=”25”;
person.work=function(){
alert(person.name)};
person,work();
用function来模拟参构造函数来实现(用this关键字构造的上下文属性)
function Pet(name,age,hobby){
this.name=name;//this作用域:当前对象
this.age=age;
this.hobby=hobby;
this.eat=function(){
alert(“我叫”+this.name);
}
}
var maidou=new Pet(“麦兜”,25,“coding”);
meidou.eat();//调用eat方法
用工厂方式来创建(内置对象)
用原型方式来创建
用混合方式来创建
9.JavaScript作用链域?
全局函数无法查看局部函数的内部细节,但局部函数可以查看其上层的函数细节,直至全局细节。
当需要从局部函数查找某一属性或方法时,如果当前作用域没有找到,就会上溯到上层作用域查找
直至全局函数,这种组织形式就是作用域链
9.谈谈对this的理解
this总是指向函数的直接调用者(而非间接调用者)
如果有new关键字,this指向new出来的那个对象
在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent中的this忠实指向全局对象Window
10.eval是做什么的?
它的功能是把对应的字符串解析成JS代码并运行
应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)
11.什么是window对象?什么是document对象
window对象是指浏览器打开的窗口。
document对象是Documentd对象(HTML文档对象)的一个只读引用,window对象的一个属性
12.null,undifined的区别?
null:表示一个对象是“没有值”的值,也就是值为“空”
undefined:表示一个变量声明了没有初始化(赋值)
undefined不是一个有效的JSON,而null是;
undefined的类型(typeof)是undefined
null的类型(typeof)是object
13.事件是?IE与火狐的事件机制有什么区别?如何阻止冒泡?
我们在网页中的某个操作(有的操作对应多个事件)。例如:当我们点击一个按钮就会产生一个事件。是被JavaScript侦测到的行为
事件处理机制:IE是事件冒泡、Firefox同时支持两个事件模型,也就是说:捕获型事件和冒泡型事件
ev.stopPropagation();(旧IE的方法:ev.cancelBubble=true)
14.什么是闭包,为什么要用它?
闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的变量,利用闭包可以突破作用链域,将函数内部的变量和方法传递到外部。
闭包的特性:
函数内再嵌套函数内部函数可以引用外层的参数和变量
参数和变量不会被垃圾回收机制回收
15.JavaScript代码中的“use strict”是什么意思?使用它区别是什么?
use strict是一种ECMAscript 5 添加的严格运行模式,这种模式使得JavaScript在更严格的条件下运行
使js编码更加规范化的模式,消除JavaScript语法的一些不合理、不严谨之处,减少一些怪异行为
默认支持的糟糕特性都会被禁用,比如不能用with,也不能在意外的情况下给全局变量赋值
全局变量的显示声明,函数必须声明在顶层,不允许在非函数代码块内声明函数,arguments.calle也不允许使用
消除代码运行的一些不安全之处,保证代码运行的安全,限制函数中的arguments修改,严格模式下的eval函数的行为和非严格模式的也不相同

提高编译器的效率,增加运行速度
为未来新版本的JavaScript标准化做铺垫
16.如何判断一个对象是否属于一个类?
使用instanceof
17.new操作符具体干了什么?
创建一个空对象,并且this变量引用该对象,同时还继承了该函数的原型
属性和方法被加入到this引用的对象中
新创建的对象由this所引用,并且最后隐式的返回this
18.JavaScript中,有一个函数,执行时对象查找时,永远不会去查找原型,这个函数是?
JavaScript中hasOwnProperty函数方法是返回一个布尔值,指出一个对象是否具有指定名称的属性。此方法无法检查该对象的原型链中是否具有该属性;该属性必须是对象本身的一个成员。
18.JSON的了解?
JSON是一种轻量级的数据交换格式
它是基于JavaScript的一个子集。数据格式简单,易于读写,占用带宽小
如:{“age”:“12”,“name”:”back”}
JSON字符串转换为JSON对象:
var obj=eval(‘(‘+str+’)’);
var obj=str.parseJSON();
var obj=JSON.parse(str);
JSON对象转换为JSON字符串:
var last=obj.toJSONString();
19.js延时加载的方式有哪些?
defer和async、动态创建DOM方式、按需异步载入js
20.Ajax是什么?如何创建一个Ajax?
ajax的全称:Asynchronous JavaScript And XML
异步传输+js+xml
所谓异步,在这里简单地解释就是:向服务器发送请求的时候,我们不必等待结果,而是可以同时做其他的事情,等到有了结果它自己会根据设定进行后续的操作。而不是整个页面进行刷新,提高用户体验
(1).创建XMLHttpRequest对象,也就是创建一个异步调用对象
(2).创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息
(3).设置相应HTTP请求状态变化的函数
(4).发送HTTP请求
(5).获取异步调用返回的数据
(6).使用JavaScript和DOM实现局部刷新
21.Ajax解决浏览器缓存问题?
(1)在ajax发送请求前加上 anyAjaxObj.SetRequestHeader(“If-Modified-Since”,”0”);
(2)在ajax发送请求前加上 anyAjaxObj.SetRequestHeader(“Cache-Control”,”no-cache”);
(3)在URL后面加上一个随机数:“fresh=”+Math.random;
(4)在URL后面加上时间搓:“nowtime=”+new Date().getTime();
(5)如果使用jQuery,直接这样就可以了$.ajaxSetup({cache:false})。这样页面的所有ajax都会执行这条语句就是不需要保存缓存的记录

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值