例举3种强制类型转换和2种隐式类型转换
强制(parseInt,parseFloat,number)
隐式(== ===)
split() join() 的区别
前者是将字符串切割成数组的形式,后者是将数组转换成字符串
JavaScript的基本数据类型
Number、String 、Boolean 、 Null 、Undefined
Object是js中所有对象的父对象
新类型:Symbol
数据类型判断
- typeof typeof对于基本数据类型判断是没有问题的,但是遇到引用数据类型(如:Array)是不起作用
- instanceof 判断new 关键字创建的引用数据类型 不考虑 null 和 undefined(这俩个比较特殊)以对象字面量创建的基本数据类型
- constructor constructor 似乎完全可以应对基本数据类型和引用数据类型,但如果声明了一个构造函数,并且把他的原型指向了 Array 的 原型,所以这种情况下,constructor也显得力不从心
- Object.prototype.toString.call() 完美的解决方案
说说js的基本规范
1、不要在同一行声明多个变量
2、使用 === 或 !== 来比较true/false或者数值
3、switch必须带有default分支
4、函数应该有返回值
5、for if else 必须使用大括号
6、语句结束加分号
7、命名要有意义,使用驼峰命名法
Ajax使用
所谓异步,就是向服务器发送请求的时候,我们不必等待结果,而是可以同时做其他的事情,等到有了结果它自己会根据设定进行后续操作,于此同时,页面是不会发生整页刷新的,提高了用户体验
创建Ajax的过程
1、创建XMLHttpRequest对象(异步调用对象)
var xhr = new XMLHttpRequest();
2、创建新的Http请求
xhr.open('get','example.php',falset)
3、设置响应Http请求状态变化的函数
4、发送http请求
xhr.send(data);
获取异步调用返回的数据
注意:
1)页面初次加载时,尽量在web服务器一次性输出所有相关的数据,只在页面加载完之后,用户进行操作时采用ajax进行交互
2)同步ajax在IE上回产生页面假死的问题。所以建议采用异步ajax
3)尽量减少ajax请求次数
4)ajax安全问题,对于敏感数据在服务器端处理,避免客户端处理过滤。对于关键业务逻辑代码也必须放在服务器端处理
谈谈this的理解
1)this总是指向函数的直接调用者(而非间接调用者)
2)如果有new关键字,this指向new出来的那个对象
3)在事件中,this指向目标元素,特殊的是IE的attachEvent中的this总是指向全局对象window
什么是window对象?什么是document对象?
window对象代表浏览器中打开的一个窗口。document对象代表整个html文档。实际上,document对象是window对象的一个属性。
什么是闭包,为什么要用它
闭包指的是一个函数可以访问另一个函数作用域中的变量。常见的构造方法,是在一个函数内部定义另外一个函数。内部函数可以引用外层函数的变量;外层变量不会被垃圾回收机制回收。
注意:闭包的原理是作用域链,所以闭包访问的上级作用域中的变量是个对象,其值为其运算结束后的最后一个值。
优点:避免全局变量污染。
缺点:容易造成内存泄露
例子:
function makeFunc () {
var name = "Mozilla";
function displayName () {
console.log(name)
}
return displayName;
}
var myFunc = makeFunc();
myFunc(); //输出Mozilla
javascript代码中的“use strict”;是什么意思?使用它区别是什么?
除了正常模式运行外,ECMAScript添加了第二种运行模式:“严格模式”。
作用:
1)消除js不合理、不严谨地方,减少怪异行为
2)消除代码运行的不安全之处
3)提高编译器的效率,增加运行速度
4)为未来的js新版本做铺垫
new操作符具体干了什么呢
1)创建一个空对象,并且this变量引用该对象,同时还继承了该函数的原型
2)属性和方法被加入到this引用的对象中
3)新创建的对象由this所引用,并且最后隐式的返回this
javascript中,执行时对象查找时,永远不会去查找原型的函数?
Object.hasOwnProperty(proName):是用来判断一个对象是否有你给出名称的属性。不过需要注意的是,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员。
对JSON的了解
JSON.parse(str) // 解析JSON字符串变成js值或对象
JSON.stringify(obj) // 将一个js值(对象或者数组)转换为一个JSON字符串
eval(’(’+json + ‘)’) //用eval方法注意加括号,而且这种方法更容易被攻击 不建议使用
js延迟加载的方式有哪些
js的延迟加载有助于提高页面的加载速度。
defer和async、动态创建DOM方式(用得最多)、按需异步载入js
defer:延迟脚本。立即下载,但延迟执行(延迟到整个页面都解析完毕后再运行),按照脚本出现的先后顺序执行。
async:异步脚本。下载完立即执行,但不保证按照脚本出现的先后顺序执行
什么是跨域问题,如何解决跨域问题?
因为浏览器有同源策略,如果协议(http或者https)不同、端口不同、主机不同,三者满足其一即产生跨域,跨域的解决方案最优的是cors
call apply bind
call() 方法和apply() 方法的作用相同,动态改变某个类的某个方法的运行环境。他们的区别在于接收参数的方式不同。在使用call()方法时,传递给函数的参数必须逐个列举出来。使用apply()时,传递给函数的是参数数组。
bind 比较麻烦 需要手动调用
事件委托是什么
利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行
如何阻止默认事件
(1)return false;
(2) ev.preventDefault();