美文网首页
JavaScript笔记

JavaScript笔记

作者: 我随便取的名 | 来源:发表于2017-05-30 17:38 被阅读0次

    数组:

    var arr = [10, 20, '30', 'xyz'];
        arr.length;//num
        arr.indexOf(10);     //返回引索位置
        arr.match(RegEx);     //匹配正则返回匹配成功的字符,或者查找某一个指定的值并返回找到的值
          PS: 匹配正则时若匹配多个字符时,返回值为一个数组,数组的[0]为匹配文本,后面的是子文本。
        arr.slice(0, 3);     //截取部分元素组成一个新的数组
                                [10,20,'30']
        arr.push('a','b');   //在末尾加上相应元素
        arr.find();          //在数组中查找第一个满足指定测试的值
        arr.pop();           //返回最后一个元素并删除
        arr.unshift('a', 'b');//在头部加上一些元素
        arr.shift();          //删掉第一个元素
        arr.sort();           //排序,按ascii值小到大,并非数字大小
        arr.sort(function (a,b) { return a>b?-1:1;  });
          //  对数字排序
        arr.reverse();        //反转
        arr.splice(1, 2);     //从指定位置开始删除或添加元素
        arr=arr.concat(arr2);     //连接两个数组
        arr.join(',');        //用指定字符连接元素
    

    字符串:

    var message = '你好, ' + name + ', 你今年' + age + '岁了!';
         //或者var message = `你好, ${name}, 你今年${age}岁了!`;
         s.toLowerCase();     //转换为小写
         s.toUpperCase();     //转换为大写
         s.substring(0,5);    //返回指定区间子串
         '\'  为转换符-----'I\'m \"OK\"!';
    
    类型转换:
    var number='a';
    number.charCodeAt();   //97  字符转换为ascii
    String.fromCharCode(96);  //'a'  ascii转换为字符
    
    String(12);  //'12'  转换为字符串
    Number('12'); // 12  转换为数字
    Number('ab');//NaN 
    
    var str=[1,2,3];
    str.toString();  //"1,2,3"  转换为字符串对象,等价于String(str)
    Number((0.8-0.6).toFixed(1)); //0.2
         //在js中对于浮点的运算默认精度为循环小数0.8-0.6=0.2000000001;
         //要进行转换,toFixed(1),保留一位小数
    
    对象:
    var xiaoming = {
        name: '小明'
    };
    xiaoming.age; // undefined
    xiaoming.age = 18; // 新增一个age属性
    xiaoming.age; // 18
    xiaoming.hasOwnProperty('name');//对象中是否有某一属性
    xiaoming['属性名为变量']=1;   //给对象添加一个属性及键值
    delete xiaoming.age; // 删除age属性
    xiaoming.age; // undefined
    delete xiaoming['name']; // 删除name属性
    xiaoming.name; // undefined
    delete xiaoming.school; // 删除一个不存在的school属性也不会报错
    
    'name'  in xiaoming;//------------对象中是否存在某个属性
    

    循环

    for...in------------------------循环一个对象所有属性
    eg:

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

    Map

    Map是一组键值对的结构,具有极快的查找速度。
    结构为:Map( [ [ key, value], [ key, value],...... [ key, value] ])

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

    Map的方法有set---添加、has---存在?、get---获得、delete---删除

    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
    

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

    forEach方法

    var a = ['A', 'B', 'C'];
    a.forEach(function (element, index, array) {
        // element: 指向当前元素的值
        // index: 指向当前索引
        // array: 指向Array对象本身
        alert(element);
    });//依次输出'A', 'B', 'C'
    

    注意

    • 名字是不固定,但是位置是固定的,如果只关心element,那么给forEach一个参数就可以,如果需要index,那么就要给两个参数,如果需要array,就要给三个,也就是这三个参数的含义是定好的。

    函数

    arguments——关键字,指向当前函数传入的所有参数,类似Array。
    常被用来:
    获取参数长度:arguments.length;
    获取具体参数:arguments[ i ];

    rest参数——接受所有传入参数但在function中没有写出来的参数,类似array。
    eg:计算很多参数的和

    function sum(...rest){
        if( arguments.length===0){
            return 0;
        }
        var sum=0;
        for(var i of rest){
            sum = sum+i;
        }
        return sum;
    }
    

    高阶函数

    map

    对数组中每一个元素(字符串、数字、对象)操作
    实例
    对数组的处理

    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]
    

    重新格式化数组中的对象

    var kvArray = [{key: 1, value: 10}, 
                   {key: 2, value: 20}, 
                   {key: 3, value: 30}];
    
    var reformattedArray = kvArray.map(function(obj) { 
       var rObj = {};
       rObj[obj.key] = obj.value;
       return rObj;
    });
    
    // reformattedArray is now [{1: 10}, {2: 20}, {3: 30}], 
    
    // kvArray is still: 
    // [{key: 1, value: 10}, 
    //  {key: 2, value: 20}, 
    //  {key: 3, value: 30}]
    
    reduce

    这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算,其效果就是:

    arr = [x1, x2, x3, x4];
    arr.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
    

    reduce的完整句法是 arr.reduce( callback, [ initiaValue])

    • 其中callback可接受四个参数(括起来),分别是:
      accumulator当前累积值
      currentValue是正在处理的当前元素
      currentIndex是当前元素的索引
      array是被处理的数组。参数的位置是固定的,名称随便取。
    • 其中[initiaValue]用做第一个参数的值。如果要reduce之后的返回是一个数组,则要写成‘[]’否则会报错。
    filter

    与map和reduce结构类似,根据返回值的true/false过滤一些元素

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

    排序,简单形式arr.sort();//按ASCII来排序。也可以写出高阶的形式,定义它的排序方法。
    实例(降序)

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

    jQuery

    jQuery是一个被广泛应用的库,将所有功能封装在jQuery这个全局变量中。
    $ ===jQuery;

    基本选择器
    1、id选择器

    // 查找<div id="abc">:
    var div = $('#abc');
    

    2、按标签查找

    var ps = $('p'); // 返回所有<p>节点
    ps.length; // 数一数页面有多少个<p>节点
    

    3、类选择器

    var a = $('.red'); // 所有节点包含`class="red"`都将返回
    // 例如:
    // <div class="red">...</div>
    // <p class="green red">...</p>
    

    当一个结点有多个class时

    var a = $('.red.green'); // 注意没有空格!
    // 符合条件的节点:
    // <div class="red green">...</div>
    // <div class="blue green red">...</div>
    

    4、按属性查找:
    id和class都可以称作属性,除此之外还有其他如name/p等
    ^——开头
    $——结尾

    var icons = $('[name^=icon]'); // 找出所有name属性值以icon开头的DOM
    // 例如: name="icon-1", name="icon-2"
    var names = $('[name$=with]'); // 找出所有name属性值以with结尾的DOM
    // 例如: name="startswith", name="endswith"
    

    5、组合查找

    var emailInput = $('input[name=email]'); 
    // 不会找出<div name="email">,只会选择input中的元素
    

    6、多项选择器
    用“,”组合起来

    $('p.red,p.green'); // 把<p class="red">和<p class="green">都选出来
    

    层级选择器
    如果两个元素之间具有层级关系,可以用空格隔开来表示(从上到下)。

    子选择器:如果层级关系是父子关系,则用‘>’来连接

    $('ul.lang li');
    $('ul.lang>li.lang-javascript'); // 可以选出[<li class="lang-javascript">JavaScript</li>]
    

    函数
    find() //查找某结点的指定子节点
    parent() //查找其上层结点
    next() //下一个
    prev() //上一个
    filter() //过滤符合条件的结点
    map() //对若干结点进行操作,参见map的用法
    first() ;//获取第一个结点
    last(); //获取最后一个结点
    slice(); //参见js的一些基本用法

    可以看看JSON的相关内容,经常会用的
    学习网站JSON--W3school
    等等等

    应用
    用jQuery获取结点之后呢?就可以对结点进行操作,如:修改结点内容、更改结点的CSS样式、获取结点信息、操作表单、添加/删除结点等等。
    详情可参考廖雪峰的教程

    事件
    一般用于与用户的交互,事件一般是鼠标或键盘的响应。

    鼠标事件
    click: 鼠标单击时触发;
    dblclick:鼠标双击时触发;
    mouseenter:鼠标进入时触发;
    mouseleave:鼠标移出时触发;
    mousemove:鼠标在DOM内部移动时触发;
    hover:鼠标进入和退出时触发两个函数,相当于mouseenter加上mouseleave。
    例如:

    a.on('click', function () {
        alert('Hello!');
    });
    //或者
    a.click(function(){
      ……
    });
    //on方法用来绑定一个事件,我们需要传入事件名称和对应的处理函数。
    

    键盘事件
    键盘事件仅作用在当前焦点的DOM上,通常是<input>和<textarea>。
    keydown:键盘按下时触发;
    keyup:键盘松开时触发;
    keypress:按一次键后触发。

    其他常用事件
    submit:当<form>提交时触发
    ready:当页面被载入并且DOM树完成初始化后触发,可用来写其他的初始化。

    PS: ready事件可直接写
    $(function () {
        // init...
    });
    

    change:当<input> ,<select>, <textarea>的内容改变是触发
    focus:当DOM获得焦点时触发;
    blur:当DOM失去焦点时触发;

    动画
    原理非常简单:我们只需要以固定的时间间隔(例如,0.1秒),每次把DOM元素的CSS样式修改一点(例如,高宽各增加10%),看起来就像动画了。

    var div = $('#test');
    div.hide(3000);//在3秒内消失
    div.show('slow'); //在0.6内显示
    div.toggle();//根据当前状态决定的英文show()还是hide()。
    div.slideUp(3000); // 在3秒钟内逐渐向上消失
    div.slideDown(3000); // 在3秒钟内逐渐向上出现
    div.fadeOut('slow'); // 在0.6秒内淡出
    

    其他

    var a = prompt("......"); //输出“......”,并用a获取需要输入的值
    typeof(a); //获取数值类型

    apply与call的用法

    两者都是为了动态改变this而出现的,区别在于接受参数的方式不同,call需要把参数按顺序传递进去,而apply则是把参数放在数组里传递。

    var func = function(arg1, arg2) {
    };
    
    func.call(this, arg1, arg2);//
    func.apply(this, [arg1, arg2]);
    

    相关文章

      网友评论

          本文标题:JavaScript笔记

          本文链接:https://www.haomeiwen.com/subject/vyblfxtx.html