shen076

1.NaN === NaN; // false   Not a Number与所有其他值都不相等,包括它自己

  isNaN(NaN); // true

  1 / 3 === (1 - 2 / 3); // false  浮点数在运算过程中会产生误差

2.大多数情况下,我们都应该用nullundefined仅仅在判断函数参数是否传递的情况下有用

3.启用严格模式:JavaScript代码的第一行写上 \'use strict\';

4.ES6新增了一种多行字符串的表示方法,用` ... `表示(键盘左上角的点)

  ES6新增了一种模板字符串,可以如下写:

var name = \'小明\';
var age = 20;
alert(`你好, ${name}, 你今年${age}岁了!`);

5.字符串是不可变的

var s = \'Test\';
s[0] = \'X\';
alert(s); // s仍然为\'Test\'
alert(s[0]);  //仍然为\'T\'

调用一些字符串方法本身不会改变原有字符串的内容,而是返回一个新字符串

var s = \'hello, world\'  //中间有空格
s.substring(0, 5); // 从索引0开始到5(不包括5),返回\'hello\'
s.substring(7); // 从索引7开始到结束,返回\'world\'

6.直接给Arraylength赋一个新的值会导致Array大小的变化

var arr = [1, 2, 3];
arr.length; // 3
arr.length = 6;
arr; // arr变为[1, 2, 3, undefined, undefined, undefined]
arr.length = 2;
arr; // arr变为[1, 2]

Array的索引进行赋值会直接修改这个Array,与上面的字符串有所不同。

var arr = [\'A\', \'B\', \'C\'];
arr[1] = 99;
arr; // arr现在变为[\'A\', 99, \'C\']

7.indexOf

var arr = [10, 20, \'30\', \'xyz\'];
arr.indexOf(10); // 元素10的索引为0
arr.indexOf(20); // 元素20的索引为1
arr.indexOf(30); // 元素30没有找到,返回-1,  arr.indexOf(xyz)也是-1
arr.indexOf(\'30\'); // 元素\'30\'的索引为2

8.slice()类似于上面的substring(),只不过是用于数组。如果不给slice()传递任何参数,它就会从头到尾截取所有元素。

var arr = [\'A\', \'B\', \'C\', \'D\', \'E\', \'F\', \'G\'];
arr.slice(0, 3); // 从索引0开始,到索引3结束,但不包括索引3: [\'A\', \'B\', \'C\']
arr.slice(3); // 从索引3开始到结束: [\'D\', \'E\', \'F\', \'G\']

9.push()Array的末尾添加若干元素,     pop()则把Array的最后一个元素删除掉。

   unshift()向Array的头部添加若干元素shift()则把Array的第一个元素删掉。空数组继续pop或者shift不会报错,而是返回undefined

10.sort()可以对当前Array进行重新默认排序(按ASCII码,小写字母在大写字母之后),10会在2之前!

    reverse()把整个Array的元素倒序

   要按数字大小排序,我们可以这么写:

var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
    if (x < y) {
        return -1;
    }
    if (x > y) {
        return 1;
    }
    return 0;
}); // [1, 2, 10, 20]

忽略大小写,按照字母序排序:

var arr = [\'Google\', \'apple\', \'Microsoft\'];
arr.sort(function (s1, s2) {
    x1 = s1.toUpperCase();
    x2 = s2.toUpperCase();
    if (x1 < x2) {
        return -1;
    }
    if (x1 > x2) {
        return 1;
    }
    return 0;
}); // [\'apple\', \'Google\', \'Microsoft\']

注意,sort()方法会直接对Array进行修改保存:

var a1 = [\'B\', \'A\', \'C\'];
var a2 = a1.sort();
a1; // [\'A\', \'B\', \'C\']
a2; // [\'A\', \'B\', \'C\']
a1 === a2; // true, a1和a2是同一对象

 

11.splice()方法

var arr = [\'Microsoft\', \'Apple\', \'Yahoo\', \'AOL\', \'Excite\', \'Oracle\'];
arr.splice(2, 3, \'Google\', \'Facebook\'); //从[2]开始,删除3个元素 [\'Yahoo\', \'AOL\', \'Excite\'],同时这3个元素也是返回值,并把\'Google\', \'Facebook\'放在这里。
arr; // 结果是[\'Microsoft\', \'Apple\', \'Google\', \'Facebook\', \'Oracle\']
arr.splice(2, 2); // 从[2]开始,删除2个元素[\'Google\', \'Facebook\'],同时也是返回值
arr; // [\'Microsoft\', \'Apple\', \'Oracle\']arr.splice(2, 0, \'Google\', \'Facebook\'); // 返回[],因为没有删除任何元素
arr; // [\'Microsoft\', \'Apple\', \'Google\', \'Facebook\', \'Oracle\']

12.concat()方法把当前的Array和另一个Array连接起来,并且自动把Array拆开

var arr = [\'A\', \'B\', \'C\'];
arr.concat(1, 2, [3, 4]); // [\'A\', \'B\', \'C\', 1, 2, 3, 4]

13.join()把当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串

var arr = [\'A\', \'B\', \'C\', 1, 2, 3];
arr.join(\'-\'); // \'A-B-C-1-2-3\'

14.如果属性名包含特殊字符,如-之类的,就必须用\'\'括起来,且无法用.访问,要用[\'XXX\']访问

var xiaohong = {
    name: \'小红\',
    \'middle-school\': \'No.1 Middle School\'
};

xiaohong[\'middle-school\']; // \'No.1 Middle School\' xiaohong[\'name\']; // \'小红\' xiaohong.name; // \'小红\'

访问不存在的属性不报错,而是返回undefined,但是可以直接定义一个属性且赋值,如xiaoming.age = 18;

在属性前加 delete 可以删除属性,如 delete xiaoming.age; // 删除age属性

15.如果我们要检测xiaoming是否拥有某一属性,可以用in操作符

var xiaoming = {
    name: \'小明\',
    birth: 1990,
    school: \'No.1 Middle School\',
};
\'name\' in xiaoming; // true
\'grade\' in xiaoming; // false

但是显示true的属性不一定就是xiaoming本身的,有可能是继承的。

用hasOwnProperty()方法可以判断准确,只有自身的才会是true

xiaoming.hasOwnProperty(\'name\'); // true

16.JavaScript把nullundefined0NaN和空字符串\'\'视为false,其他值一概视为true

17.for ... in循环遍历

var aa = {
    name: \'Jack\',
    age: 20,
    city: \'Beijing\'
};
for (var key in aa) {
    alert(key); // \'name\', \'age\', \'city\'
}

如果拥有继承属性,这样写还会把继承的属性遍历出来。要过滤掉对象继承的属性,用hasOwnProperty()来实现

var o = {
    name: \'Jack\',
    age: 20,
    city: \'Beijing\'
};
for (var key in o) {
    if (o.hasOwnProperty(key)) {
        alert(key); // \'name\', \'age\', \'city\'
    }
}

对于数组,直接像上面那样遍历只会得出索引编号。而且是字符串类型

var a = [\'A\', \'B\', \'C\'];
for (var i in a) {
    alert(i); // \'0\', \'1\', \'2\'
    alert(a[i]); // \'A\', \'B\', \'C\'
}

同时每一个索引其实也是一个属性

var a = [\'A\', \'B\', \'C\'];
a.name = \'Hello\';
for (var x in a) {
    alert(x); // \'0\', \'1\', \'2\', \'name\'
}

 

18.JavaScript的对象的键必须是字符串

 Map是一组键值对的结构,具有极快的查找速度,使用方法如下:

var m = new Map([[\'Michael\', 95], [\'Bob\', 75], [\'Tracy\', 85]]);
m.get(\'Michael\'); // 95

或者:

var m = new Map(); // 空Map
m.set(\'Adam\', 67); // 添加新的key-value
m.set(\'Bob\', 59);
m.has(\'Adam\'); // 是否存在key \'Adam\': true
m.get(\'Adam\'); // 67
m.delete(\'Adam\'); // 删除key \'Adam\'
m.get(\'Adam\'); // undefined

Set和Map类似,但是key不能重复,示例:

var s = new Set([1, 2, 3, 3, \'3\']);
s; // Set {1, 2, 3, "3"}
s.add(4); //添加4

s; // Set {1, 2, 3, "3",4}

19.遍历Array可以采用下标循环,遍历MapSet就无法使用下标。

    ArrayMapSet都属于iterable类型,可以统一通过新的for ... of循环来遍历,用法如下:

var a = [\'A\', \'B\', \'C\'];
var s = new Set([\'A\', \'B\', \'C\']);
var m = new Map([[1, \'x\'], [2, \'y\'], [3, \'z\']]);
for (var x of a) { // 遍历Array
    alert(x);
}
for (var x of s) { // 遍历Set
    alert(x);
}
for (var x of m) { // 遍历Map
    alert(x[0] + \'=\' + x[1]);
}

这样与上面的for...in有很大区别,输出不再是索引,也不再是属性

var a = [\'A\', \'B\', \'C\'];
a.name = \'Hello\';
for (var x of a) {
    alert(x); // \'A\', \'B\', \'C\'
}

20.还有一种更好的遍历方法用forEach函数

var a = [\'A\', \'B\', \'C\'];
a.forEach(function (element, index, array) {
    // element: 指向当前元素的值
    // index: 指向当前索引
    // array: 指向Array对象本身   
//一般(element)就够了,不用后面两个参数。
alert(element); //element返回A,B,C。index返回0,1,2。array返回3次A,B,C });

对于Set

var s = new Set([\'A\', \'B\', \'C\']);
s.forEach(function (element, sameElement, set) {
    alert(element);       //前两个都是返回A,B,C。set则返回3次[object Set]
});

对于Map

var m = new Map([[1, \'x\'], [2, \'y\'], [3, \'z\']]);
m.forEach(function (value, key, map) {
    alert(value);      //value返回x,y,z。key返回1,2,3。map返回3次[object Map]
});

 

分类:

技术点:

相关文章: