1. 什么是 JavaScript ?
JavaScript 是一种具有面向对象的、解释型的、基于对象和事件驱动的、跨平台的、弱类型的程序设计语言
2. JavaScript 与 ECMAScript 的关系?
ECMAScript 是规则,JavaScript 是对规则的体现
3. 变量的命名规则?
严格区分大小写,由英文、数字、下划线、$组成,推荐使用驼峰命名法,不能使用保留字和关键字,见名知意,名字不能重复
4. window.onload 的作用?
当页面加载完成后再执行
5. js 数据类型?
基本数据类型有:Number、String、Boolean、Undefined、Null;
复合数据类型有:Object(object、array、function)
6. null 和 undefined 的区别?
null 表示值为空,但是为 object 类型
undefined 表示变量没有初始化
7. 运算符的种类?
算术运算符 + – * / % ++ —
赋值运算符 = += -= *= /=
比较运算符 > >= < <= == != === !==
逻辑运算符是与 &&,或 ||, 非 !
三目运算符 // 条件 ? 语句一 : 语句二 如果条件成立,执行 ? 后面语句,不成立执行:后面的语句
8. var a = 10;var b = a++; a、b 最后的结果是?
a=11,b=10
9. “==”与“===”的区别?
==值一样,类型可以不一样
===值一样,类型一样
10. console.log(0.1+0.2 == 0.3)
false ,因为小数相加会有一点偏差
11. NaN 会在什么样的情况下出现呢?列举出现这种情况的代码
typeof Number(undefined));//NaN
typeof Number([1,2]));//NaN
typeof Number({}));//NaN
typeof Number(10abc));//NaN
12. 列举三种强制类型转换和 2 种隐式类型转换
Number() String() parseInt()
console.log(1+‘2’);
console.log(2-true);
13. document.write() 与 innerHTML 的区别?
- document.write()可以识别标签。
- document.write()会覆盖标签中已有的内容, 但是不会覆盖 document.write()添加的内容。
- document.write()只能操作 body 的内容。
- document.write() == document.body.innerHTML。
14. this 对象的理解?
- 在事件处理函数中,this 指向触发事件的元素
- 在全局中(普通函数)中,this 指向 window
- 谁调用指向谁
15. 写一个获取非行间样式的函数
function getStyle(obj, attr) { //obj 表示元素 attr 表示属性
if (obj.currentStyle) {
return obj.currentStyle[attr]// ie 浏览器
} else {
return getComputedStyle(obj)[attr]// 标准浏览器
}
}
16. 说说你对作用域链的理解?
作用域链是 JS 的查找机制,从当前作用域查找,若没有则向上一级作用域查找,一直到最外层,如果都查找不到则返回 is not define
17.写出下列函数的运行结果
var x = 1, y = z = 0;
function add(n) {
n = n + 1;
};
y = add(x);
function add(n) {
n = n + 3;
};
z = add(x);
console.log(x, y, z);
结果: undefined undefined
18. 请解释变量提升?
- 变量提升(预解析)找 var 的时候,如果存在 var 关键字,则会将这个变量先存储下来,存储的形式为:var a = undefined,预解析的时候变量中存的都是 undefined,
- 等到逐行解析遇到表达式即 + – * / % ++ — = 等操作才会改变变量的值。找 function 的时候,会将整个函数都保存下来。找参数的时候,即执行函数时,函数内部可以看作是一个小的区域,有自己的预解析,参数就跟变量 var 一样。
19. 函数声明和函数表达式声明的区别?
- 函数声明 function 函数名(){}
- 函数表达式声明 var f =function (){console.log(函数表达式);} f();
- 区别:解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问),函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解析执行。
20. JavaScript 两种变量范围有什么不同?
- 全局变量: 直接在 script 标签下声明的变量,任何地方都能访问,任何地方都能对其值进行改变。
- 局部变量: 函数内部定义的变量,函数内能访问,出了函数的括号就不能访问(垃圾回收)。
21. 定时器的分类?他们的区别及用法是什么?
- setInterval( 函数 ,间隔时间(单位毫秒))
- setTimeout(函数,间隔时间(单位毫秒))
22. js 有哪些内置对象?
- 时间对象 date, 字符串对象 string,数学对象 Math,数值对象 Number,
- 数组对象 Array,函数对象 function, 函数参数集合 arguments,
- 布尔对象 Boolean,基础对象 Object