★★★★★
- call和apply的含义和区别
- apply----应用某一对象的一个方法,用另一个对象替换当前对象
B.apply(A, arguments);即A对象应用B对象的方法。
- call----调用一个对象的一个方法,以另一个对象替换当前的对象
B.call(A, args1,args2);即A对象调用B对象的方法。
- 区别在于:传参形式不同,apply只能接收两个参数,对象和一个数组,如果没有提供这两个参数,thisObj=global对象,并且无法传参;call可以接收多个参数,使当前this实例指针保持一致,或者在特殊情况下需要改变this指针。如果没有提供thisObj参数,那么 Global 对象被用作thisObj。
- javascript的数据类型 和内存存储
- 基本数据类型和引用数据类型;number、string、boolean、NaN、undefined;对象数据类型和函数数据类型;
- 基本类型就是保存在栈内存中的简单数据段,而引用类型指的是那些保存在堆内存中的对象。
-
基本类型数据在内存中分别占有固定大小的空间,他们的值保存在栈空间,我们通过按值来访问的;
引用数据类型,值大小不固定,存放在堆内存中,地址存放在栈内存中,是按引用访问的。
- 如何解决跨域?
想要访问其他网站上的js脚本,使用ajax会遇到跨域问题,跨域问题来源于同源策略,为了数据安全,ajax规定不能跨域访问。
-
jsonp解决跨域
首先<script>标签对是不受同源策略限制的,它可以载入任意地方的js文件,并不要求同源。
jsonp理念就是,我和服务器端约定好一个函数名,当我请求文件的时候,服务器返回一段JavaScript代码,这段代码调用了我们约定好的函数,并将数据以参数的形式传入。数据以json的格式返回
你需要获取数据的页面 index.html:
<script>
function getWeather(data) {
console.log(data);
}
</script>
<script src="http://x.y.com/xx.js">
------------------[http://x.y.com/xx.js](http://x.y.com/xx.js) 文件内容: getWeather({ "城市": "北京", "天气": "大雾" });
服务端代理解决跨域
接收到客户端请求以后,经由本域服务器代理向目标服务器发送请求,并将响应数据返回客户端。
- 同步和异步的区别?
JavaScript将任务的执行模式分为:同步(Synchronous)和异步(Asynchronous)。
JavaScript语言的执行环境是"单线程",就是指一次只能完成一个任务。如果有多个任务就必须排队,前面一个任务完成,再执行后面的任务,一次类推。这便是"同步模式",程序的执行顺序和排列顺序是一致的,同步的;"异步模式"则完全不同,每一个任务有一个或多个回调函数,前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等待前一个任务结束就执行,程序的执行顺序和排列顺序不是一致的,异步的。锅里正煲着汤,同时我在为下一道菜做着准备。
- 同步模式,任务耗时长,常见的浏览器无响应,卡住其他任务无法进行
- 异步模式,非常重要,在浏览器端,耗时很长的操作都应该异步执行,避免浏览器失去响应,最好的例子就是Ajax操作。在服务器端,"异步模式"甚至是唯一的模式,因为执行环境是单线程的,如果允许同步执行所有http请求,服务器性能会急剧下降,很快就会失去响应。
-
字符串函数和数组函数
(1) 字符串函数str.charAt(下标)----返回指定位置的字符
str.charCodeAt(下标)----返回指定位置字符的ASCII值
str.fromCharCode(编码1,编码2,…)----接收一个或多个ASCII值,返回对应的字符-
查找类型
- str.indexOf(字符)----返回该字符在字符串中首次出现的位置,若字符不存在则返回-1;
- str.lastIndexOf(字符)----返回该字符在字符串中最后一次出现的位置,若字符不存在则返回-1;
- str.match(字符)----在字符串中查找字符,若存在则返回该字符,若不存在则返回null;
- str.replace(被替换的字符串,新字符串)----返回替换后的新字符串,不会影响原来的字符串。
-
截取类型
- str.splice(start,end)----从指定的位置开始,到指定的位置结束,返回截取的字符串,不会影响原来的字符串。支持负数,从后往前数。
- str.substring(start,end)----不支持负数
- str.substr(start,length)----从指定的位置开始,到指定的长度结束,不支持负数。
-
转换类型
- str.split("分隔符",length)----将字符串按指定的分隔符转换为数组
- str.toLowerCase()/str.toUpperCase()----将字符串中英文字母转换为小写/大写
(2) 数组函数
* 添加删除类
* arr.push()----在数组后面添加元素,返回数组的长度,会影响原数组
* arr.pop()----在数组后面删除一个元素,返回被删除的元素,会影响
* arr.unshift()----从前面添加元素,返回值为数组的长度,会影响原数组
* arr.shift()----从数组的前面删除一个元素,返回值为删除的元素,会影响原数组
* arr.splice(index,数量,添加的元素1,2,...)----万能的添加删除函数,index表示要操作的元素位置下标,数量:0表示添加,返回值空白,0以外数字表示删除的个数,返回删除的元素
- 转换类型
- arr.join("分隔符")----返回值为新字符串,参数不传时默认为","
- 数组连接
- arr.concat(arr1,arr2)----不会影响原数组
- 数组截取
- arr.slice(start,end)
- 数组排序
- myarr.sort([callback])----callback省略时,默认按ASCLL排序;升序降序
- 事件委派
- 事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档)。
- 利用事件冒泡这一特性,指定一个事件处理程序,管理这一类的所有事件,在他的父元素或更高元素设置事件处理程序,将子元素事件委托给父元素事件。达到省时省力的效果。
- document load 和document ready的区别
- ready----表示文档结构已经加载完成(不包含图片等非文字媒体文件)
$(function(){})===$(document).ready(function(){}) - load----表示页面包含图片等文件在内的所有元素都加载完毕
window.onload=function(){}
- 一个接口为ajax/api.jsp,请求方式为GET,有一个名为ulr的参数。值为当前页面的URl,正常情况下,返回到内容是{result:true,mes:"success"},请用ajax组件,写一段在正常浏览器可以运行的代码,将结果解析成json的对象格式
★★★★
- JavaScript的基本命名规范
- 首先区分大小写,命名可以以字母、字母下划线或
$
开头,不能使用关键字和保留字,习惯驼峰命名法,首字母大写命名法。命名一定要有意义。中文也是合法的标识符,可以用作变量名。
- JavaScript的原型和原型链,有什么特点?
- 每个对象都会在其内部初始化一个属性,就是
prototype
属性,当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去prototype
中去找这个属性,这个prototype
又有自己的prototype
,于是就这样一直找下去(这样一直找下去就是Object
内置对象),这就是原型链。 - 特点:JavaScript对象是通过引用来传递的,当我们修改原型对象时,与之相关的对象也会继承这一改变。
- JavaScript如何实现继承?
- 构造继承
- 原型继承
- 实例继承
- 拷贝继承
- 原型
prototype
机制或apply
和call
方法去实现较简单,一般使用构造函数与原型混合方式
- JavaScript作用域链
- 全局作用域和局部作用域
- 当需要从局部函数查找某一属性或方法时,如果当前作用域没有找到,就会上溯到上层作用域查找,直至全局函数,这种组织形式就是作用域链。
- 子对象会一级一级地向上寻找所有父对象的变量
- 代码优化:尽量少使用全局变量,尽可能使用局部变量。
//这个函数引用了两次全局变量document,查找该变量必须遍历整个作用域链,
//直到最后在全局对象中才能找到。
function changeColor(){
var doc=document;
doc.getElementById("btnChange").onclick=function(){
doc.getElementById("targetCanvas").style.backgroundColor="red";
};
}
- null和undefined的区别
- null对象----表示"没有对象",此处不应该有值。
(1) 作为函数的参数,表示该函数的参数不是对象。
(2) 作为对象原型链的终点。 - undefined----表示"缺少值",此处应该有值但没有定义
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
- 什么是闭包,为什么使用它?
- JavaScript的作用域,从外部无法调用函数内的局部变量
- 闭包就是能够读取其他函数内部变量的函数,由于在JavaScript语言中,只有函数内部的子函数才能读取局部变量,因此可以简单的理解为:定义在一个函数内部的函数。
- 作用:可以从外部调用函数内的局部变量;将这些变量的值始终保存在内存中。
- new操作符究竟干了些什么?
function New (f) {
/1. 创建对象并设置原型链/
var n = { 'proto': f.prototype };
return function () {
/2. 设置this指向/
f.apply(n, arguments);
/3. 返回函数/
return n;
};
} - 写一个js函数,将地址参数解析为一个对象
- 删除数组中的重复元素
- 如何判断某个对象是否是某个类的实例化?
- 添加事件的方式?
- IE和doms事件的区别
- DOM 节点的所有操作和方法
- 强转和隐式类型转化
★★★
- JavaScript创建对象的几种方式
- 字面量方式(json格式)
- new关键字
- 构造函数function
- 混合型创建
function+prototype+new
- 什么是window对象? 什么是document对象?
- window对象----浏览器中一个打开的窗口对象,是一个顶层对象
document对象----html文档对象,可用来访问页面中的所有元素,是window对象的成员对象子对象
- ["a","b","c"].map(parseInt)的结果是什么?
- javascript 中的“use strict”是什么意思?使用它区别是什么?
- 求两个正整数的最大公约数
- ”==”和“===”的不同
- json和jsonp有什么差异?
- ajax 和jsonp的区别
- j延迟加载的方式
- 如何用js实现类,成员,私有变量?
- eval的作用
- js的兼容性问题
- 继承的顺序
- 解释jsonp的原理,以及为什么不是真正的ajax
- javascript的本地对象,内置对象和宿主对象
★★
- document.write 和innerHTML的区别?
- 使用闭包的例子
- 什么是cookie隔离?
- 所有可以在浏览器保存数据,然后下次访问的方式
- cookie
- sessionStorage 会话级本地存储
- localStorage 永久级本地存储
- 本地数据库 浏览器端的数据库支持
http://www.cnblogs.com/fly_dragon/p/3946012.html
http://blog.csdn.net/lxcao/article/details/52809939#comments
http://www.cnblogs.com/linguoguo/p/5106618.html
- 哪些操作会造成内存泄露?
内存泄露可以定义为应用程序不再需要的内存,因为某种原因其不会返回到操作系统或可用内存池。 会导致迟缓,崩溃,高延迟等应用问题。 - 声明变量忘记使用关键字var创建一个意外的全局变量
* 为了防止这些错误发生,添加'use strict'; 在您的JavaScript文件的开头。 这使得能够更严格地解析JavaScript以防止意外的全局变量。
- 被遗忘的事件函数或回调函数
- 脱离 DOM 的引用
- 闭包
- javascript的同源策略
- 首先同源是指两个url的协议,域名和端口相同
- 同源策略是浏览器上为安全性考虑实施的安全策略,限制了来自不同源的"document"或脚本,对当前"document"读取或设置某些属性。
- 比如一个恶意网站的页面通过iframe嵌入了银行的登录页面(二者不同源),如果没有同源限制,恶意网页上的javascript脚本就可以在用户登录银行的时候获取用户名和密码。同源策略就是为了解决这类问题而出现的。
- 在浏览器中,<script>、< img>、<iframe>、<link>等标签都可以加载跨域资源,而不受同源限制,但浏览器限制了JavaScript的权限使其不能读、写加载的内容。
- 另外同源策略只对网页的HTML文档做了限制,对加载的其他静态资源如javascript、css、图片等仍然认为属于同源。
- 本地对象,内置对象,宿主对象
- 本地对象----
独立于宿主环境的ECMAScript实现提供的对象
需要实例化的对象都为本地对象
Function Object Array Number String Boolean Date() 正则RegExp()
- 内置对象----
由ECMAScript实现提供的、独立于宿主环境的所有对象,在ECMAScript程序开始执行时出现。
global对象和math对象 - 宿主对象----
由ECMAScript实现的宿主环境提供的对象,即我们网页的运行环境(操作系统和浏览器)
,所有的BOM和DOM都是宿主对象。
- this 的情况
- 在普通函数中,this指向的window对象
- 在构造函数中,this指向的是实例化的对象
- 在方法中,this指向的是调用该方法的对象
- 在事件中,this指向的是事件触发的对象
- 下面哪种写法会报错?
A: var a=();
B: var a={};
C: var a=[];
D: var a=/ /;
★
- 如果你手动实现动画,你认为最小的时间间隔是多少?
- 十六进制颜色转化为rgb颜色
var sRgb = "RGB(23, 245, 56)" , sHex = "#34538b";
var sHexColor = sRgb.colorHex(); //rgb颜色转换为十六进制颜色
var sRgbColor = sHex.colorRgb(); //十六进制颜色转换为rgb颜色 - 下面哪种写法可以匹配一个正整数
A: ^[1-9]\d1.$;
B: ^[1-9]+$;
C: ^[0-9]\d1.$;
D: ^[1-9]\d+$;