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;
}

  待续。。。

 

posted @ 2018-09-21 12:28  mr.wu55  Views(161)  Comments(0)    收藏  举报