js知识点梳理
1/JavaScript和JAVA有啥关系?
A:没有关系,只是名字里都含有‘java’罢了;
在1995 年 Netscape 一位名为 Brendan Eich 的工程师创造了 JavaScript,随后在 1996 年初,JavaScript 首先被应用于 Netscape 2 浏览器上。最初的 JavaScript 名为 LiveScript,后来因为 Sun Microsystem 的 Java 语言的兴起和广泛使用,Netscape 出于宣传和推广的考虑,将它的名字从最初的 LiveScript 更改为 JavaScript——尽管两者之间并没有什么共同点。这便是之后混淆产生的根源。
2/JavaScript和ECMAScript有啥关系?
A:可以理解为ECMAScript是普通话,JavaScript是方言,JavaScript使用人数众多。
Netscape 将 JavaScript 提交至 Ecma International(一个欧洲标准化组织), ECMAScript 标准第一版便在 1997 年诞生了,随后在 1999 年以 ECMAScript 第三版的形式进行了更新,从那之后这个标准没有发生过大的改动。由于委员会在语言特性的讨论上发生分歧,ECMAScript 第四版尚未推出便被废除,但随后于 2009 年 12 月发布的 ECMAScript 第五版引入了第四版草案加入的许多特性。第六版标准已经于2015年六月发布。
3/JavaScript 中的类型包括哪些?
A:Number(数字),String(字符串),Boolean(布尔),Symbol(符号)(第六版新增),Object(对象),Function(函数),Array(数组),Date(日期),RegExp(正则表达式),Null(空),Undefined(未定义),此外JavaScript 还有一种内置Error(错误)类型。
4/声明一个新变量的方法是使用关键字 let 、const 和 var,有什么区别?
A:var 是最常见的声明变量的关键字,这是因为var是传统上在 JavaScript 声明变量的唯一方法。var没有let,const的种种限制。使用 var 声明的变量在它所声明的整个函数都是可见的。
let 语句声明一个块级作用域的本地变量,并且可选的将其初始化为一个值。
const 允许声明一个不可变的常量。这个常量在定义域内总是可见的。
如果声明了一个变量却没有对其赋值,那么这个变量的类型就是 undefined。
5/js的对象的属性可以通过哪种链式(chain)表示方法进行访问?
A:
var obj = {
name: "Carrot",
"for": "Max",//'for' 是保留字之一,使用'_for'代替
details: {
color: "orange",
size: 12
}
}
obj.details.color; // orange obj["details"]["size"]; // 12
6/Array.length 表示什么?
A:length属性通常表示数组的长度,并不总是等于数组中元素的个数,数组的长度是比数组最大索引值多一的数。
如果试图访问一个不存在的数组索引,会得到 undefined。
7/js怎样遍历数组?
A:例子:
for (var i = 0; i < a.length; i++) {
// Do something with a[i]
}
例子(注意,如果有人向 Array.prototype 添加了新的属性,使用这样的循环这些属性也同样会被遍历。所以并不推荐这种方法):
for (var i in a) {
// Do something with a[i]
}
例子,ECMAScript 5 增加了遍历数组的另一个方法 forEach():
["dog", "cat", "hen"].forEach(function(currentValue, index, array) {
// Do something with currentValue or array[index]
});
8/js函数的内部对象arguments 怎么使用?
A:arguments就如同一个类似于数组的对象一样,包括了所有被传入的参数。举例:
function add() {
var sum = 0;
for (var i = 0, j = arguments.length; i < j; i++) {
sum += arguments[i];
}
return sum;
}
add(2, 3, 4, 5); // 14
接下来创建一个求平均数的函数:
function avg() {
var sum = 0;
for (var i = 0, j = arguments.length; i < j; i++) {
sum += arguments[i];
}
return sum / arguments.length;
}
avg(2, 3, 4, 5); // 3.5
如果参数为数组的计算平均值该怎么办呢:
function avgArray(arr) {
var sum = 0;
for (var i = 0, j = arr.length; i < j; i++) {
sum += arr[i];
}
return sum / arr.length;
}
avgArray([2, 3, 4, 5]); // 3.5
如果参数为数组的计算平均值简便方法:
avg.apply(null, [2, 3, 4, 5]); // 3.5
9/js匿名函数的用法?
A:
var avg = function() {
var sum = 0;
for (var i = 0, j = arguments.length; i < j; i++) {
sum += arguments[i];
}
return sum / arguments.length;
};
这个函数在语义上与 function avg() 相同。你可以在代码中的任何地方定义这个函数,就像写普通的表达式一样。
基于这个特性,有人发明出一些有趣的技巧。与 C 中的块级作用域类似,下面这个例子隐藏了局部变量:
var a = 1;
var b = 2;
(function() {
var b = 3;
a += b;
})();
a; // 4
b; // 2
10/js函数的递归调用?
A:递归在处理树形结构(比如浏览器 DOM)时非常有用。
function countChars(elm) {
if (elm.nodeType == 3) { // 文本节点
return elm.nodeValue.length;
}
var count = 0;
for (var i = 0, child; child = elm.childNodes[i]; i++) {
count += countChars(child);
}
return count;
}
待续。。。

浙公网安备 33010602011771号