zoukankan      html  css  js  c++  java
  • JavaScript全面学习(入门)

    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]
    });
  • 相关阅读:
    【ZOJ3195】Design the City-LCA算法
    【ZOJ3195】Design the City-LCA算法
    【POJ1330】Nearest Common Ancestors-LCA算法
    【POJ1330】Nearest Common Ancestors-LCA算法
    【POJ3237】Tree-树链剖分
    【POJ3237】Tree-树链剖分
    【SPOJ375】Query on a tree-树链剖分
    perl 回调必须是函数引用
    运行复制的ZooKeeper 部署
    运行复制的ZooKeeper 部署
  • 原文地址:https://www.cnblogs.com/shen076/p/6159687.html
Copyright © 2011-2022 走看看