zoukankan      html  css  js  c++  java
  • JavaScript常用定义和方法

    1.字符串一些常用方法,注意,调用这些方法本身不会改变原有字符串的内容,而是返回一个新字符串。
    toUpperCase()
    把一个字符串全部变为大写:

    var s = 'Hello';
    s.toUpperCase(); // 返回'HELLO'


    toLowerCase()
    把一个字符串全部变为小写:

    var s = 'Hello';
    var lower = s.toLowerCase(); // 返回'hello'并赋值给变量lower
    lower; // 'hello'


    indexOf()
    会搜索指定字符串出现的位置:

    var s = 'hello, world';
    s.indexOf('world'); // 返回7
    s.indexOf('World'); // 没有找到指定的子串,返回-1


    substring()
    返回指定索引区间的子串:

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

    parseInt() 函数

    parseInt() 函数可解析一个字符串,并返回一个整数。
    parseInt(string, radix)

    parseInt("10");            //返回 10
    parseInt("19",10);        //返回 19 (10+9)
    parseInt("11",2);        //返回 3 (2+1)
    parseInt("17",8);        //返回 15 (8+7)
    parseInt("1f",16);        //返回 31 (16+15)
    parseInt("010");        //未定:返回 10 或 8


    2.数组常用方法
    indexOf()
    来搜索一个指定的元素的位置

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


    slice()
    截取Array的部分元素,然后返回一个新的Array:

    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']

    注意到slice()的起止参数包括开始索引,不包括结束索引。
    如果不给slice()传递任何参数,它就会从头到尾截取所有元素。利用这一点,我们可以很容易地复制一个Array。

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

    var arr = [1, 2];
    arr.push('A', 'B'); // 返回Array新的长度: 4
    arr; // [1, 2, 'A', 'B']
    arr.pop(); // pop()返回'B'
    arr; // [1, 2, 'A']
    arr.pop(); arr.pop(); arr.pop(); // 连续pop 3次
    arr; // []
    arr.pop(); // 空数组继续pop不会报错,而是返回undefined
    arr; // []


    unshift和shift

    var arr = [1, 2];
    arr.unshift('A', 'B'); // 返回Array新的长度: 4
    arr; // ['A', 'B', 1, 2]
    arr.shift(); // 'A'
    arr; // ['B', 1, 2]
    arr.shift(); arr.shift(); arr.shift(); // 连续shift 3次
    arr; // []
    arr.shift(); // 空数组继续shift不会报错,而是返回undefined
    arr; // []

    sort
    对当前Array进行排序,它会直接修改当前Array的元素位置,直接调用时,按照默认顺序排序:

    var arr = ['B', 'C', 'A'];
    arr.sort();
    arr; // ['A', 'B', 'C']

    reverse
    把整个Array的元素给掉个个,也就是反转:

    var arr = ['one', 'two', 'three'];
    arr.reverse();
    arr; // ['three', 'two', 'one']


    splice
    修改Array的“万能方法”,它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素

    var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
    // 从索引2开始删除3个元素,然后再添加两个元素:
    arr.splice(2, 3, 'Google', 'Facebook'); // 返回删除的元素 ['Yahoo', 'AOL', 'Excite']
    arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
    // 只删除,不添加:
    arr.splice(2, 2); // ['Google', 'Facebook']
    arr; // ['Microsoft', 'Apple', 'Oracle']
    // 只添加,不删除:
    arr.splice(2, 0, 'Google', 'Facebook'); // 返回[],因为没有删除任何元素
    arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']


    concat
    把当前的Array和另一个Array连接起来,并返回一个新的Array

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


    join

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


    3.对象
    由于JavaScript的对象是动态类型,你可以自由地给一个对象添加或删除属性:

    var xiaoming = {
        name: '小明'
    };
    xiaoming.age; // undefined
    xiaoming.age = 18; // 新增一个age属性
    xiaoming.age; // 18
    delete xiaoming.age; // 删除age属性
    xiaoming.age; // undefined
    delete xiaoming['name']; // 删除name属性
    xiaoming.name; // undefined
    delete xiaoming.school; // 删除一个不存在的school属性也不会报错


    检测xiaoming是否拥有某一属性,可以用in操作符:

    var xiaoming = {
        name: '小明',
        birth: 1990,
        school: 'No.1 Middle School',
        height: 1.70,
        weight: 65,
        score: null
    };
    'name' in xiaoming; // true
    'grade' in xiaoming; // false

    不过要小心,如果in判断一个属性存在,这个属性不一定是xiaoming的,它可能是xiaoming继承得到的:
    要判断一个属性是否是xiaoming自身拥有的,而不是继承得到的,可以用hasOwnProperty()方法:

    var xiaoming = {
        name: '小明'
    };
    xiaoming.hasOwnProperty('name'); // true
    xiaoming.hasOwnProperty('toString'); // false


    ES6规范引入了新的数据类型Map,Set

    var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
    m.get('Michael'); // 95
    
    var s1 = new Set(); // 空Set
    var s2 = new Set([1, 2, 3]); // 含1, 2, 3


    ES6标准引入了新的iterable类型(可逸代)
    Array、Map和Set都属于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]);
    }


    4.函数
    免费赠送的关键字arguments,它只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数。arguments类似Array但它不是一个Array。

    function foo(x) {
        alert(x); // 10
        for (var i=0; i<arguments.length; i++) {
            alert(arguments[i]); // 10, 20, 30
        }
    }
    foo(10, 20, 30);


    Max是一个JavaScript新手,他写了一个max()函数,返回两个数中较大的那个:

    document.write(Math.max(7.25,7.30));


    5.变量作用域
    ES6引入了新的关键字let,用let替代var可以申明一个块级作用域的变量

    'use strict';
    function foo() {
        var sum = 0;
        for (let i=0; i<100; i++) {
            sum += i;
        }
        i += 1; // SyntaxError
    }


    ES6标准引入了新的关键字const来定义常量,const与let都具有块级作用域

    const PI = 3.14;
    PI = 3; // 某些浏览器不报错,但是无效果!
    PI; // 3.14


    6.高级函数
    map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果。

    function pow(x) {
        return x * x;
    }
    var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81]


    reduce()把一个函数作用在这个Array的[x1, x2, x3...]上,这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算,其效果就是:

    [x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)
    var arr = [1, 3, 5, 7, 9];
    arr.reduce(function (x, y) {
        return x + y;
    }); // 25


    filter也是一个常用的操作,它用于把Array的某些元素过滤掉,然后返回剩下的元素。
    把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素。
    例如,在一个Array中,删掉偶数,只保留奇数

    var arr = [1, 2, 4, 5, 6, 9, 10, 15];
    var r = arr.filter(function (x) {
        return x % 2 !== 0;
    });
    r; // [1, 5, 9, 15]


    把一个Array中的空字符串删掉,可以这么写:

    var arr = ['A', '', 'B', null, undefined, 'C', '  '];
    var r = arr.filter(function (s) {
        return s && s.trim(); // 注意:IE9以下的版本没有trim()方法
    });
    r; // ['A', 'B', 'C']


    匿名的函数(没有函数名的函数)

    var friends = ["Mike", "Stacy", "Andy", "Rick"];
    
    friends.forEach(function (eachName, index){
    console.log(index + 1 + ". " + eachName); // 1. Mike, 2. Stacy, 3. Andy, 4. Rick
    });


    sort排序算法

    // 看上去正常的结果:
    ['Google', 'Apple', 'Microsoft'].sort(); // ['Apple', 'Google', 'Microsoft'];
    // apple排在了最后:
    ['Google', 'apple', 'Microsoft'].sort(); // ['Google', 'Microsoft", 'apple']
    // 无法理解的结果:
    [10, 20, 1, 2].sort(); // [1, 10, 2, 20]


    第二个排序把apple排在了最后,是因为字符串根据ASCII码进行排序,而小写字母a的ASCII码在大写字母之后。
    第三个排序结果是什么鬼?简单的数字排序都能错?
    这是因为Array的sort()方法默认把所有元素先转换为String再排序,结果'10'排在了'2'的前面,因为字符'1'比字符'2'的ASCII码小。

    7闭包
    高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回

    function lazy_sum(arr) {
        var sum = function () {
            return arr.reduce(function (x, y) {
                return x + y;
            });
        }
        return sum;
    }


    当我们调用lazy_sum()时,返回的并不是求和结果,而是求和函数:

    var f = lazy_sum([1, 2, 3, 4, 5]); // function sum()

    调用函数f时,才真正计算求和的结果:

    f(); // 15


    在函数lazy_sum中又定义了函数sum,并且,内部函数sum可以引用外部函数lazy_sum的参数和局部变量,当lazy_sum返回函数sum时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”的程序结构拥有极大的威力。

    请再注意一点,当我们调用lazy_sum()时,每次调用都会返回一个新的函数,即使传入相同的参数:

    var f1 = lazy_sum([1, 2, 3, 4, 5]);
    var f2 = lazy_sum([1, 2, 3, 4, 5]);
    f1 === f2; // false

    f1()和f2()的调用结果互不影响。

    8.箭头函数
    ES6标准新增了一种新的函数:Arrow Function(箭头函数)。
    为什么叫Arrow Function?因为它的定义用的就是一个箭头:
    x => x * x
    上面的箭头函数相当于:

    function (x) {
        return x * x;
    }


    generator(生成器)是ES6标准引入的新的数据类型。一个generator看上去像一个函数,但可以返回多次。

    function* foo(x) {
        yield x + 1;
        yield x + 2;
        return x + 3;
    }

    函数在执行过程中,如果没有遇到return语句(函数末尾如果没有return,就是隐含的return undefined;),控制权无法交回被调用的代码。









  • 相关阅读:
    拆分字符串为单条记录
    Howto: Change Windows Hostname and Keep Oracle 10g Running
    关于Oracle的MTS
    linux/centos Header V3 DSA signature: NOKEY, key ID 错误解决方法
    cacti0.8.7d安装
    Identifying Host Names and IP Addresses
    修改Oracle字符集(character set)
    企业管理器(OEM)介绍: Grid Control 和 Database Control
    搞OMS真折腾
    ORA12560: TNS: 协议适配器错误
  • 原文地址:https://www.cnblogs.com/iflygofy/p/6927149.html
Copyright © 2011-2022 走看看