1.1 一个完整的js实现包括啥?
ECMAscript
DOM(文档对象模型)
BOM(浏览器对象模型)
1.2 ECMAScript的宿主环境有?
宿主环境:提供基本的ECMAScript实现,也提供语言的扩展,便于语言和环境之间对接交互。
宿主环境有:Web浏览器,node,flash,webview
1.3 为何要DOM?
确保代码可以跨平台使用,
1.4 DOM各级的区别?
1级映射文档结构
2级事件和支持CSS
3级加载和保存文档的方法
1.5 BOM的作用是?
提供了独立于内容而与浏览器窗口进行交互的对象,提供了访问窗口对象的一些方法。最强大的功能就是提供了一个访问HTML页面的入口—document对象,使我们可以通过这个入口来使用DOM的强大功能,说的简单一点就是让js可以控制页面以外的部分。
2.1 带src属性的script元素与其闭合标签嵌入JS代码有何问题?
只会下载并执行外部脚本文件,function sayHi(){alert(“Hi!”)被忽略,不执行。
2.2 如何避免包含太多JS代码页面的空白?
js引用放在body页面后面,如例子加粗部分。
2.3 为何最好一个页面只包含一个延迟脚本?
若出现了两个延迟脚本,HTML5规范要求脚本按照出现的先后顺序执行,因此第一个先于第二个执行,而这两个脚本会先于DOMContentLoaded事件执行,在现实当中,延迟脚本并不一定按照顺序执行,也不一定在DOMContentLoaded事件触发前执行,因此最好只包含一个延迟脚本。
2.4 为何建议异步脚本最好不要在加载期间修改DOM?
因为页面会先于脚本加载页面,容易出问题
2.5 noscript元素中的内容何时出现?
浏览器不支持脚本或者脚本被禁用
3.1 为何要用严格模式?
避免不确定行为和不安全的操作。
3.2 省略分号有何隐患?
若将分号省略,那么b的值就为4,而不是3了。容易带来错误和降低性能(解析器需要推测)
3.3 在控制语句中使用代码块的好处?
让编码意图清晰和降低修改代码出错的几率。
3.4 为何说JS的变量是松散类型的?
松散类型:可以用来保存任何类型的数据。
因为变量仅是保存值的占位符,变量可以看做存储数据的容器。
3.5 js的数据类型有?
基本类型:undefined,null,Number,Boolean,String
引用类型Object
3.6 typeof的作用?
检测变量的数据类型
3.7 typeof的返回值有?
undefined,number,boolean,string,object,function
3.8 引入undefined的目的是?
区分空对象指针与未初始化的变量
3.9 对未声明变量只能执行的操作是?
typeof检测其类型
3.10 为何建议显示初始化变量?
便于使用typeof区分变量是未声明还是未初始化
3.11 null值表示什么?
空对象指针
3.12 为何把变量显示初始化为undefined没必要,而把对象初始化为nul却又必要?
体现nul作为空指针的惯例,进一步区分nu和undefined
3.13 Boolean的字面值区分大小写吗?
区分,所以False,与false不一样
3.14 0.1+0.2不等于0.3?
浮点数的精度是17位,存在舍入误差
3.15如何理解NaN?
表示一个本来要返回数值的操作数未返回数值的情况
3.16JS中除0会阻止代码的执行吗?
不会,因为它返回了NaN
3.17对象调用isNaN()函数有何不同?
先调用valueOf()进行判断,视情况再调用toString()进行判断
3.18数值转型函数Number与parselnt/parseFloat有何区别?
前者针对任何类型,后两者只针对字符串
3.19parselnt和parseFloat有何区别?
一是parseFloat不忽略第一个小数点;二是parseFloat始终忽略前导0;三是parseFloat只解析十进制;
3.20怎样避免parselnt错误解析字符串?
任何情况下明确基数。
3.21Number与parselnt解析空字符串时有何区别?
前者返回0,后者返回NaN
3.22转换为字符串的方法及区别?
toString()通过指定基数,改变输出的值,nu和undefined没有toString方法()String()将任何类型的值转换成字符串
3.23如何改变数值的toString()方法的返回值?
传入指定基数
3.24为何说Object是所有实例的基础?
Object所具有的任何属性和方法也存在于具体对象中。
3.25递增/减前置和后置的区别?
前置时变量在语句执行前改变,后置则是在语句执行后改变
3.26系统怎样对非数值应用位操作符进行自动处理?
使用Number()函数把该值转换为数值
3.27如何理解短路操作?
第一个数决定结果,则不会操作第二个数
3.28比较数值与字符串时是如何转换的?
字符串转换为数值
3.29任何操作数与NaN的比较结果是?
flase
3.30相等和全等的区别?
“==”只要求值相等;“===”要求值和类型都相等
全等不需要转换,性能更好
3.31为何NaN不等于NaN?
逻辑上设计如此
3.32 逗号操作符的赋值规则是?
返回表达式最后一项
例:
Var num = {5、1、2、0}; //num的值为0
由于0是表达式中的最后一项,因此num的值就是0。
3.33 为何for..in循环输出的属性名不可预测?
Js对象属性没有顺序
3.34 为何不建议大量使用with语句?
因为它会去检查大括号内的每个变量是否是这个对象的属性或者方法,使得JavaScript的执行时间增加。性能下降,调试困难
3.35 为何switch语句比较时不发生转换?
使用的是全等比较(例如:字符串“10”不等于数值10)
3.36 为何位于return语句后的代码不会执行?
函数执行return后会立即停止并退出,所以警示框永远不会被调用。
3.37 JS函数中通过什么获取参数数组?
arguments对象
用法:
(1)利用argument[i]访问函数参数
(2) 利用argument返回参数得个数(argument.length)
3.38 为何JS中的函数不能实现重载?
如例子中声明了两个同名函数,但从结果看,调用的是第二个函数,第一个函数被第二个函数覆盖了。原因在于在创建第二个函数的时候,实际上它覆盖了引用第一个函数的变量add。
无法做到参数类型和数量的不同
补充:
一
JavaScript:基于对象的多范式编程语言
对象:
所谓对象就是键值对的集合
对象是将属性和方法封装起来(数据集,功能集)
注: 对象用名词来表示的
方法一般是些动词
属性值则往往是一些形容词
类:
没有类,一切都是基于对象的,依靠的是一套原型系统,原型本身实际上也是对象。
封装:
1.相关的数据(用于存储属性)
2.基于这些数据所能做的事(所能调用的方法)
二
js三大特点(面向对象)
聚合:也叫组合,是指我们将几个现有对象合并成一个新对象的过程。
继承:为了实现复用(把别人东西拿来用,成为自己的东西)
多态:b对象继承了上一级对象a的所有方法。这两个对象都实现了‘talk’等方法。代码中有一个叫c的变量, 即使不知道它是a对象的还是b对象的,也依然可以直接调用该对象的‘talk’方法,不会影响代码的正常工作。不同对象通过相同的方法调用来实现各自行为的能力。
控制台输出undefined:因为控制台在执行我们输入的表达式之后,总是要输出该表达式的运行结果。
undefined与null的区别:
undefined访问不存在的变量时,初始化之前的值为undefined
null通常是没有值或空值
区别:null的变量通常被认为是已经定义的,只不过不代表任何东西。
三
函数:
匿名函数的使用
回调函数
自调函数
内嵌函数(在函数内部定义的函数)
以函数为返回值的函数
能重定义自身的函数
闭包