JavaScript面试基础

1.何时使用==和===

if(obj.a == null) {} 只有此时用==,其他时候用===,这是JQuery源码中推荐使用的写法

2.JS中按照存储方式分为:值类型,引用类型

值类型:赋值时不会互相干扰

引用类型:指针类型,会互相干扰,它不是值的拷贝

3.理解JSON

JSON是一个JS对象,也是一种数据格式

JSON.stringify({a:10,b:4})  转换成字符串

JSON.parse('{"a":10,"b":4}') 转换成JSON对象

4.原型与原型链

用instanceof来判断一个函数是否是一个变量的构造函数

5条原型规则:

★所有引用类型(数组,对象,函数),都具有对象的特性,即:

    可自由扩展属性(除了null外)


★所有引用类型(数组,对象,函数),都有一个__proto__属性(隐式原型),属性值是一个普通的对象

★所有函数,都有一个prototype属性(显式原型),属性值是一个普通的对象

★所有引用类型(数组,对象,函数),__proto__属性值指向它的构造函数的prototype属性值

★当试图得到一个对象的某个属性值时,如果这个对象本身没有这个属性,那么它会去它的__proto__(即它的构造函数的prototype)中寻找

问题:

如何准确判断一个变量是数组类型:


描述new一个对象的过程:

创建一个新对象,this指向这个新对象,执行代码(即对this赋值),隐式返回this

zeopto(或其他框架)源码中如何使用原型链


5.闭包使用场景

函数作为返回值

函数作为参数传递

作用域:自由变量,作用域链(自由变量的查找),闭包的使用场景

闭包主要用于封装变量,收敛权限

6.this

作为构造函数执行

作为对象属性执行

作为函数执行


7.异步和单线程

使用异步的场景:定时任务:setTimeout,setInterval;网络请求:ajax,动态img加载;事件绑定(都需要等待,等待过程不能阻塞)

同步与异步的区别:同步会阻塞代码的执行,异步不会(alert是同步执行)

8.其他

获取2017-06-10的日期


获取随机数,要求长度一致的字符串格式

(Math.random在前端中主要是为了清除缓存)


写一个能遍历对象和数组的通用forEach函数(数组API(foeEach,every,some,filter,sort))


9.JS-Web-API

DOM本质:浏览器把拿到的html代码,结构化一个浏览器能识别并且js可操作的一个模型

attribute:html标签的属性

property:js对象标准属性

DOM的基本数据结构:树

10.BOM

如何检测浏览器的类型

navigator.userAgent从这个字符串里来分析

拆解url的各部分

location.protocol返回协议

location.host返回主机

location.pathname

location.search

11.事件

通用事件绑定:



事件冒泡

DOM树形结构,事件冒泡

e.stopPropatation()阻止冒泡

代理:代码简洁,减少浏览器内存占用

12.ajax

同源策略:不允许ajax访问其他域的接口

可以跨域加载资源的三个标签:

    <img src=xxx> 用于打点统计

    <link href=xx>  <script> 可以使用CDN

    <script src=xx> 可以使用JSONP

所有跨域请求都必须经过信息提供方允许

JSONP实现原理:


在<script>标签中定义window.callback函数,外域执行后返回的也正好是callback函数

也可以在服务器端设置http header:


13.存储

cookie,sessionStorage,localStorage的区别

cookie:本身用于客户端与服务端通信,但是它有本地存储的功能,于是就被“借用”,使用document.cookie=...获取和修改

cookie缺点:存储量太小,所有http请求都带着,会影响获取资源的效率,API简单,需要封装才能用document.cookie=..

localStorage: API简答易用

localStorage.setItem(key,value),localStorage.getItem(key)

sessionStorage:会话关闭后就会被清理

14.AMD

Require.js

全局define函数

全局require函数

依赖JS,会自动异步加载



15.commJS

Commons不会异步加载JS,而是同步一次性加载

AMD和commonJS使用场景:

要异步加载用AMD,用NPM一般就用commonJS


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值