• JavaScript要点汇总——The Most Important


    关于JavaScript的基础变量,运算符的详解以及基本的分支循环嵌套已经在

    JS基础变量及JS中的运算符
    JS中的循环分支嵌套

    说过了,今天我们所说的是做网页中最长用到的东西。内容不算少,要有耐心,慢慢看

    1.函数的声明及调用:

    函数的声明及调用:
    使用函数前要先定义才能调用
    1.函数定义有三个部分函数名,参数列表,函数体
    定义函数的格式
    function 函数名(参数1,参数2,.......){
    函数执行部分;
    return 表达式;
    }
    函数调用的格式:直接调用:函数名(参数一的值,参数二的值,.......)
     
    声明调用匿名函数:
    1.声明一个匿名函数直接赋给某个事件
    事件名=function(){}
    window.onload=function(){
    console.log(“”);
    }
    2.使用函数表达式调用匿名函数
     
    声明函数表达式:
    var func = function(){
    console.log(“”);
    }
    调用函数表达式: func();
    》》使用匿名函数表达式,必须在声明语句后,否则报错
    3.使用自执行函数调用匿名函数:
    !function(参数一){}(参数一的值);——使用任意运算符开头,一般用!
    (function(){}());——使用小括号将函数及之后的内容包裹
    (function(){} )();——使用括号只包裹匿名函数表达式
    三种写法特点:① 结构清晰,开头加!,结尾加()。不易乱
    ②可以表明匿名函数与之后的括号为一个整体,推荐使用
    ③无法表明函数与之后()为一个整体,不推荐使用
    2.函数的几点强调
    ①函数的声明必须符合小驼峰法则,首字母小写,之后每个单词首字母大写;
    ②参数列表可以有参数,可以无参数,分别称为有参函数,无参函数;
    ③声明函数时的参数列表称为形参列表(变量名);
    调用函数时的参数列表称为实参列表(变量值);
    函数中实际有效的参数取决于实参的赋值,未被赋值的形参,将为Undefined
    ④函数如果需要返回值,可以用return返回结果。
    调用函数时,使用var 变量名=函数名;的方式接收返回结果;
    如果函数没有返回值,则接受的结果为Undefined;
    ⑤函数中变量的作用域:
    在函数中使用var声明的变量,默认为函数的局部变量,只在函数内部能用;
    不用var声明的变量,默认为全局变量(函数中的全局变量必须在函数调用后才能使用);
    函数的形参列表,为函数的局部变量,只在函数内部能用;
    ⑥函数声明与函数调用没有先后之分,即,调用语句可写在声明语句之前
    JS中代码运行,,会先进行检查,装载,即声明变量、函数等操作
    然后再进行执行阶段(变量的赋值属于执行阶段)
    函数的声明属于检查装载阶段,函数的调用属于执行阶段。所以函数调用在哪无所谓
    console.log(num);
    var num=10;
    funcN();
    function funcN(){}
    顺序为:
    --检查装载--
    ①var num;————声明变量
    ② function funcN() ————声明函数
    --执行阶段--
    ③console.log(num);
    ④ num=10;
    ⑤funcN();
    打印结果为Undefined
    函数内部的属性:
    【argument对象】
    1.作用:用于保存调用函数时所赋值的实参列表;
    当我们调用函数并使用实参赋值时,实际上参数已经保存到argument数组中。即使没有形参,也可以使用argument[n]的形式调用参数。
    2.arguments数组的个数,取决于实参列表,与形参无关。(顺序从零开始)但当第n个位置的形参、实参、arguments都存在时,形参与arguments 是同步的,即在函数中修改其中一个的值,另一个同步变化
    3.argument.callee是argument的重要属性,用来返回argument所在函数的引用:
    .argument.callee可以调用自身函数执行;在函数内部调用函数自身的写法被称为递归;

    2.JS中的BOM(浏览器对象模型)

    window对象的常用方法,均可以省略前面的window.,比如close();
    1、prompt:弹窗接受用户输入;
    2、alert:弹窗警告;
    3、confirm:带有确认/取消  按钮的提示框;
    4、close:关闭当前浏览器选项卡
    5、open:重新打开一个窗口,传入参数:URL/窗口名称/窗口特征
    6、setTimeout:设置延时执行,只会执行一次
    7、setInterval:设置定时器,循环每隔n毫秒执行一次
       两个参数:需要执行的function/毫秒
    8、clearTimeout: 清除延时
    9、clearInterval:清除定时器
       传入参数:调用setInterval时返回一个ID,通过变量接受ID,传入setInterval

    其中设置延时执行与设置定时器很常用,下面是他们的用法示例:

    var timeOutId = setTimeout(function(){
                    console.log("setTimeout");
                },5000);
                
    setInterval(function(){
                    console.log("setInterval");
                },1000);

    3.JS中的DOM

    [DOM 树节点]
    分为三大类:元素节点、文本节点、属性节点
    文本节点跟属性节点为元素节点的两个子节点。
    通过getElementById:通过ID获取唯一的节点
    [查看节点]
    1.getElementById("div1")通过id获取唯一节点:多个同名ID只会取第一个
    2.getElementsByName()通过Name取到一个数组,包含一到多个节点
    使用方式,通过循环,取到每个节点。循环次数,从零开始<数组.length
    getElementsByClassName()与getElementsByTagName取到的都是数组,用法同Name
    [查看和设置属性节点]
    1.查看属性节点:
    getAttribute("属性名");
    2.设置属性节点:
    setAttribute("属性名","属性值")
    【JS修改样式 总结】
    1.className:为元素设置一个新的class名字; div1.className="class1"
    2、 .style.:为元素设置一个新的样式.例如:div1.style.backgroundColor="red"
    3.style.cssText:为元素同时修改多个样式.例如:div1.style.cssText="100px;"
    [查看节点]
    1. tagName属性:获取标签的标签名
    2. innerHTML属性:设置或者获取节点内部的所有Html代码
    3. innerText:设置或者获取节点内部的所有文字
    4.JS中的事件
    【JS中的事件分类】
    1、鼠标事件:click/dbclick/mouseover/mouseout/mousemove/mousedown/mouseup
    2、键盘事件:
        keydown:键盘按下去触发
        keypress:键盘按下并松开的瞬间触发
        keyup:键盘抬起时触发
        
        [注意事项:(了解)]
        ①执行顺序:keydown-keypress-keyup
        ②长按时,会循环不断地执行keydown-keypress
        ③有keydown事件时,不一定有keyup事件,(事件触发过程中,鼠标移走,可能就没有keyup)
        ④keypress只能捕获字母、数字、符号键,不能捕获功能键;keydown/keyup基本可以捕获所有的功能键(特殊除外)
        ⑤keypress区分大小写,keydown和keyup不区分
        ⑥keydown/keyup区分主键盘和小键盘,keypress不区分
        
    【确定键盘触发按键】
    1、在触发过程中,传入参数e,代表按键时间;
    2、通过e.keyCode,确认按键ASCII码值,进而确定按键;
    3、所有浏览器系统的写法(一般不必要):
        var evn = e||event;//取到键盘事件
        var code = evn.keyCode||evn.which||evn.charCode;//取到按键


    【JS中的DOM0事件模型】
    1、内联模型:直接将函数名作为HTML标签的某个事件属性的属性值;
        eg:<button onclick="func()">按钮</button>
    缺点:违反W3C关于HTML与JavaScript分离的基本原则;
    2、脚本模型:在JS脚本中通过事件属性进行绑定;
        eg:window.onload = function(){}
    3、局限性:同一节点,只能绑定同类型事件

    【JS中的DOM2事件模型】
    1、添加事件绑定:
    IE10之前:btn1.attachEvent("onclick",函数);
    其他浏览器:btn1.addEventListener("onclick",函数,true/false);
                参数三:false(默认),表示事件冒泡;true,表示事件捕获
    兼容写法:
    if(btn1.attachEvent){
        btn1.attachEvent();
    }else{
        btn1.addEventListener();
    }

    优点:同一节点,可以添加多个同类型事件的监听器;


    【JS中的事件流】
    1、事件冒泡:当某DOM元素触发某事件时,会从当前DOM元素开始,逐个触发其祖先元素的同类型事件,直到DOM根节点
    DOM0模型,均为事件冒泡;
    IE中使用:.attachEvents()添加的事件,均为冒泡;
    其他浏览器:.addEventsListener添加的事件,当第三个参数为false时,为冒泡。

    2、事件捕获:当某DOM元素触发某事件时,会从DOM根节点开始,逐个触发其祖先元素的同类型事件,直到触发到当前元素为止;
    只有使用.addEventsListener添加的事件时,并设置第三个参数为true时,才进行捕获;

    ↓  当前元素        ↑
    ↓           ↑
    冒     父元素           捕
    ↓           ↑
    泡     爷爷元素       获
    ↓           ↑
    ↓  DOM根节点     ↑

    3、阻断事件冒泡(重点):
    IE浏览器中:将e.cancelBubble属性设为true;
    其他浏览器:调用e.stopPropagation();方法

    兼容写法:
    function myParagraphEventHandler(e) {
    e = e || window.event;
    if (e.stopPropagation) {
        e.stopPropagation(); //IE以外
    } else {
        e.cancelBubble = true; //IE
    }
    }

     下面是一个检测你按键的代码:

    document.onkeydown = function(e){
                    var evn = e||event;
                    var code = evn.keyCode||evn.which||evn.charCode;
                    console.log(e);
                    console.log("keydown");
                    if(code==13){
                        alert("你按了回车");
                    }
                }

    5.JS中的数组与内置对象

    1.数组的概念:
    数组是在内存中连续存储多个有序元素的结构
    元素的顺序,称为下标,通过下标查找对应元素
    2.数组的声明:
    ①通过 字面量声明
    var arr1 = [,,,]
    JS中,同一数组可以储存多种不同数据类型(一般同一数组只用于存放同一数据类型)
    var arr1 = [1,"2",true,{"name":"lyx"},[1,2]];
    ②通过new关键字声明
    var arr2 = new Array(参数);
    参数可以:
    为空:声明一个没有指定长度的数组;
    为数组的长度length:声明一个指定长度的数组,但数组的长度随时可变,可追加。最大长度为0-2^32-1
    数组默认的N个值:new Array(1,"2",true)相当于[1,"2",true]
    3.数组中元素的读写/增删:
    ①读写: 通过下标来访问元素。例如 arr2[2];
    ②增删:
    deleta arr[n]删除数组的第N+1个值,但数组长度不变,对应位置的值为Undefined
    arr3.push(值);数组最后增加一个值arr3[arr3.length]=7;
    arr3.unshift(值);数组的第零位插入一个值,其余位数顺延
    arr3.pop();删除数组最后一位,与delete不同的是POP执行后,数组长度减一。相当于arr3.length-=1
    arr3.shift();删除数组第0位,数组长度减一
    4.数组中其他常用方法:
    join("分隔符")方法,将数组用指定分隔符分隔,转为字符串。参数为空时,默认用逗号分隔
    concat();(原数组不会被改变)将数组与多个数组的值连接为新的数组
    [1,2].concat([3,4],[5,6])=[1,2,3,4,5,6];连接时中括号至多拆一层
    [1,2].concat([1,2,[3,4]])=[1,2,1,2,[3,4]];多层中括号,以二维数组的形式存在
    ③push数组最后增加一个数;unshift数组开始增加一个数,【返回数组最新长度】
    pop删除数组最后一个数;shift:删除数组第一个【返回被删除的值】调用上述方法,原数组均被改变
    reverse();数组反转。逆序排列。(原数组被改变)
    slice(begin,end);[原数组不会被改变]截取数组中的某一部分成为新数组,
    传递一个参数默认为开始索引,从当前下标开始截取到最后一个;
    传递两个参数,截取从begin到end区间,左闭右开;包含begin,不含end
    参数可以为负数,负一代表最后一个
    sort(function)【原数组会被改变】对数组进行排序,不指定排序方法,默认按首位的ascii码值进行排列
    传入排序函数,默认两个参数a.b,如果返回值>0,则a>b;反之返回<0,则a<b
    arr3.sort(function(a,b){
    return a-b;//升序排列
    return b-a;//降序排列
    });
    ⑦indexOf(value,index);返回数组中第一个value值对应的下标位置,若未找到,返回-1
    lastindexOf(value,index);返回最后一个value值对应的下标位置,------------
    >>>>若未指定index参数:默认在数组所有元素中查询,若指定index参数,则从当前index开始,向后查询;
    5.二维数组和稀疏数组【了解】
    ① 稀疏数组:数组并不含有从0开始到length-1的所有索引(它的length值比实际元素个数大);
    ② 二维数组:var arr5 = [[1,2,3],[4,5,6],[7,8,9],[0,1,2]];相当于一个四行三列的矩阵
    取出二维数组元素:arr[行号][列号],可使用嵌套循环遍历
    6.引用数据类型和基本数据类型
    引用数据类型:数组/对象 赋值时是将原变量的地址赋给新变量。两个变量实际上操作的是同一份数据,所以,修改其中一个变量
    另一个跟着变化
    基本数据类型:赋值时,是将原来变量的值赋给新的变量。两个变量属于不同的内存空间,修改其中一个,互不干扰
     
    6.JS中的内置对象
    Boolean类
    var isTrue = true ;//单纯的变量
    var isTrue1 = new Boolean(true);//一个Boolean类型的对象
    console.log(isTrue1);
     
    Number类
     
    Number.MIN_VALUE 可表示的最小数
    Number.MAX_VALUE 可表示的最大数
    num.toString() 将num转为字符串♥
    str3=num.toFixed(n);保留n位小数,进行四舍五入,转为字符串♥
    .valueOf()返回Number对象的基本数字值♥
    num.tolocaleString()将数字按照本地格式的顺序转为字符串。一般是三个一组加逗号
    .toPrecision(n)将数字格式化为指定长度,n=不包含小数点的所有位数和
     
     
    var num=1;//Number类型
    var num1=new Number(1);//Object类型
    var str = num.toString();//String类型
    var str2=num.toLocaleString();
    var str3=num.toFixed(2);
    console.log(Number.MAX_VALUE)
    num.valueOf();
     
    字符串类String
    1.属性:
    .toLowerCase();所有字符转为小写。
    .toUpperCase();所有字符转为大写。
    .charAt(n);截取字符串中的第n个字符。
    .indexOf("查询子串",index);查询从index开始的第一个子串的索引,没找到,返回-1.
    .substring(begin,end);截取子串,只写一个参数,从begin开始到最后,
    写两个参数从begin开始到end,左闭右开
    .replace("old","new");将字符串中的第一个old,替换为new;
    第一个参数可以是字符串,也可以是正则表达式(普通字符串将只匹配第一个,正则表达式则根据
    具体情况区分)
    .split("");将字符串通过指定分隔符分为数组。传入""空字符串将把单个字符存入数组
     
    var str = "i old A shuaiGe";
    var xiaoxie = str.toLowerCase();
    str.charAt(0);
    str.indexOf();
    str.substring();
    var rep=str.replace("old","new");
    console.log(rep);
    Date类
    1. new Date();拿到当前最新时间;
    new Date("2017,4,4,14:58:12");设置指定时间
    2.常用方法:
    .getFullYear():获取4位年份
    .getMonth();获取月份0~11
    .getDate();获取一个月中的某一天1——31
    .getDay();获取一周中的某一天。0——6
    .getHours() 返回 Date 对象的小时 (0 ~ 23) 1 2 3
    .getMinutes() 返回 Date 对象的分钟 (0 ~ 59) 1 2 3
    .getSeconds() 返回 Date 对象的秒数 (0 ~ 59))
     7.JS中的自定义对象
     1、基本概念:
    ①对象:对象包含一系列无序属性和方法的集合;
    ②键盘对:对象中的数据,是以键盘对的形式存在的,以键取值;
    ③属性:描述对象特征的一系列变量。【对象中的变量】
    ④方法:描述对象行为的一系列方法。【对象中的函数】
    2、对象的声明:
    ①字面量声明:
    var obj = {
        key1:value1,  //属性
        key2:value2,
        func:function(){}  //方法
    }
    =-=对象中的键,可以是任何数据类型,但,一般用作普通变量名(不需要"")即可
    =-=对象中的值可以是任何数据类型,但,字符串的话必须用""包裹
    =-=多组键值对之间用英文逗号分隔,键值对的键与值之间用英文:分隔
    new关键字:
    var liSi = new Object();
    liSi.name = "李四";
    liSi.say = function(){
        console.log("我是:"+this.name);
    }
    3、对象中属性和方法的读写
    ①.运算符:
    对象内部:this.属性名       this.方法名()
    对象外部:对象名.属性名       对象名.方法名()
    ②通过["key"]调用 : 对象名["属性名"]()
    >>>如果key中包含特殊字符,则无法使用第①中方式,必须使用第二种;
    >>>对象中,直接写变量名,默认为调用全局变量,如果需调用对象自身属性,则需要通过this关键字
    ③删除对象的属性和方法:delete 对象名.属性/方法名
    8.正则表达式
    1.正则表达式包括两部分:
    ①定义的正则表达式规则
    ②正则表达式的模式(g/i/m)
    2.正则表达式的声明
    ①字面量的声明: var reg=/表达式规则/表达式模式 /white/g
    ②new关键字声明:var reg=new RegExp("表达式规则","表达式模式")
    var reg=new Regexp("white","g")
    3.正则表达式常用方法:
    .text():检测字符串是否匹配某个正则模式,返回true、false;
    4.正则表达式的常用模式:
    g 全局匹配,不加g默认非全局匹配,只匹配第一个符合条件的字符串(例:"www".replace(/w/,"#")>>>#ww)
    i 忽略大小写。不加i默认为需要匹配大小写
    例:"aAa".replace(/A/,"#")>>>a#a
    "aAa".replace(/a/i,"#")>>>#Aa
    m 匹配多行模式。字符串多行显示,每行都有开头结尾
    例子"abc "#bc
    abc".replace(/^a/g,"#")>>>abc"
    "abc "#bc
    abc".replace(/^a/gm,"#")>>>#bc"
     
    下边是一个邮箱底色正则判断:
    var email=document.getElementById("mail").value;
    
                var reg3=/^w+@[a-zA-Z0-9]{2}[a-zA-Z0-9]?.[a-z]{2}[a-z]?$/
                if(reg3.test(email)){
                    console.log("right");
                }
                else{
                    console.log("wrong");
                }

    OK喽,相信会了这些,写一些原生的JS去实现功能已经不成问题了!个人感觉最重要的还是学会去取节点,能取到想到的节点,什么事都好说。。。

  • 相关阅读:
    音乐情感识别
    SoftmaxWithLoss函数和师兄给的loss有哪些区别呢
    内积层和全连接层是一样的
    caffe中的Local Response Normalization (LRN)有什么用,和激活函数区别
    caffe官网的部分翻译及NG的教程
    couldn't import dot_parser
    apt-get -f install
    Spring常用注解总结 hibernate注解
    Set Map List Iterator
    iframe 与frameset
  • 原文地址:https://www.cnblogs.com/cherishli/p/6847410.html
Copyright © 2020-2023  润新知