• FrontEnd-Basis-6th


    周三,晴,记录生活分享点滴

    参考博客:https://www.cnblogs.com/yuanchenqi/articles/5980312.html

    JavaScript 2

    ECMA对象

    对象分类

    方式一

    • ECMAScript:js本身的

    • DOM:与html相关

    • BOM:浏览器对象,与js浏览器相关

    方式二

    • ECMAScript包括native object 和host object

    • host object 包括 BOM、DOM

    object对象:ECMAScript 中的所有对象都由这个对象继承而来;Object 对象中的所有属性和方法都会出现在其他对象中

    ToString() : 返回对象的原始字符串表示。
    ValueOf()  : 返回最适合该对象的原始值。对于许多对象,该方法返回的值都与 ToString() 的返回值相同。

    11种内置对象

    Array       // 数组对象
    String      // 字符串对象   *****
    Date        // 日期对象
    
    Math        // 数学计算
    Boolean     // 布尔值
    Number      // 数值
    
    Function    // 函数        *****
    Global      // 全局
    Error       // 错误对象
    RegExp      // 正则表达式
    Object      // 原生类

    在JavaScript中除了null和undefined以外其他的数据类型都被定义成了对象

    <script language="javascript">
    var aa=Number.MAX_VALUE; 
    //利用数字对象获取可表示最大数
    var bb=new String("hello JavaScript"); 
    //创建字符串对象
    var cc=new Date();
    //创建日期对象
    var dd=new Array("星期一","星期二","星期三","星期四"); 
    //数组对象
    </script>

    string对象

    // 创建方式 ------------------------------------------------------------------------------------------
        // 方式一
        var s="hElLlo";
        // 方式二
        var s2=new String("hello");
    
    // String对象的属性 length ---------------------------------------------------------------------------
        alert(s.length);
    
    // 遍历字符串 ----------------------------------------------------------------------------------------
        for (var i in s){console.log(s[i])};
    
    // String方法 ----------------------------------------------------------------------------------------
    
    截取字符串:*****
          console.log(s.substr(1,1));       // 从第二个位置开始取一个字符 E
          console.log(s.substring(1,4));    // 取从索引1到索引4的位置 ElL
          console.log(s.slice(1,-1));       // 取从索引1到索引-1的位置 ElL
    
    获取指定字符:*****
          console.log(s.charAt(3));         // 第几个字符
          console.log(s.charCodeAt(3));     // 对应字符编码
    
    查询字符串match();  search():*****
          通过字符串查索引
          console.log(s.search("l"));       // 返回的第一个匹配结果的索引值
          console.log(s.match("E")[0]);     // 返回数组,里面是所有匹配结果
          console.log(s.match("E")[1]);     // 返回数组,里面是所有匹配结果
          通过索引查字符串
          console.log(s.indexOf("l"));      // 2
          console.log(s.lastIndexOf("l"));  // 倒着取 4
    /*
    编排方法:
          document.write(s.italics());      // 字体italics体
          document.write(s.bold());         // 加粗
          document.write(s.anchor("alex")); 
    
    大小写转换:
          console.log(s.toUpperCase());
          console.log(s.toLowerCase());
    
    replace、concat、split方法:
          console.log(s.replace("E","e"));  // 替代:将e代替E
          console.log(s.split("E"));        // 分割:["h","llo"]
          console.log(s.concat(" world"))   // 拼接:hElLo world
    */

    数组对象 (Array)·重点

    创建数组对象

    // 创建方式一 常用 -----------------------------------------------------
       var arr=[1,2,3,6];
    
    // 创建方式二 ----------------------------------------------------------
       var arr2=new Array(5,"hello",true,[1,3]);  // 添加一个数字的时候代表的是长度而不是内容
       console.log(arr.length);     // 个数:4
       console.log(arr2.length);    // 个数:4
       console.log(arr2);           // 结果为一个数组
            // 如果采用初始化对象方式创建数组,里面如果只有一个值而且是一个数字,那么数字表示的是长度而不是内容,如下格式:
               var arr4=new Array(3);  // 长度为3,指占了三个位置
               console.log(arr4[0]);   // undefined
               console.log(arr4[1]);   // undefined
               console.log(arr4[2]);   // undefined
               console.log(arr4[3]);   // undefined
               console.log(arr4);      // []
            // 数组是可变长的 ----------------------------------------------
               arr4[5]=10;
               console.log(arr4.length)// 长度为6,已经有5的索引值,代表6个长度

    创建二维数组

    // 二维数组 ------------------------------------------------------------ 
    var arr2=new Array(5,"hello",true,[1,3]);
    alert(arr2[3][1]);  // 取得结果:3
    // 例子 ---------------------------------------------------------------
    var cnweek=new Array(7);  // 创建长度为7的数组
    for (var i=0;i<=6;i++){
        cnweek[i]=new Array(2);  // 7个数组的内容分别都是两个元素
    }
    cnweek[0][0]="星期日";
    cnweek[0][1]="Sunday";
    cnweek[1][0]="星期一";
    cnweek[1][1]="Monday";
    ...
    cnweek[6][0]="星期六";
    cnweek[6][1]="Saturday";

    Array对象的方法

    连接数组-join方法·重要

    // 在js中运用join方法:将数组内的字符串拼接成一个字符串,join方法的对象不同于py,在js中是在Array里面
        var ret=["hello","world"].join("+");  // hello+world
    // 在python中运用join方法,在字符串里面
        s1 = '-'.join([hello,world])          // hello-world
    // 书写格式 
    x.join(bystr)
    
    /* 
    使用注解 
    x代表数组对象
    bystr作为连接数组中元素的字符串
    返回连接后的字符串
    与字符串的split功能刚好相反
    */
    
    var arr1=[1, 2, 3, 4, 5, 6, 7];
    var str1=arr1.join("-");
    alert(str1);       // 结果为"1-2-3-4-5-6-7" 

     数组的进出栈操作

    // shift unshift 和 pop push 都是栈操作
    // 队列:先进先出  栈:先进后出
    
    // push pop -----------------------------------------------------------------------------------------
    x.push(value, ...)  // 压栈 
    x.pop()             // 弹栈 (默认删除最后一个)
    
    /*
    使用注解:
    x代表数组对象
    value可以为字符串、数字、数组等任何值
    push是将value值添加到数组x的结尾
    pop是将数组x的最后一个元素删除
    */
    
    var arr1=[1,2,3];
    arr1.push(4,5);
    alert(arr1);       // 结果为"1,2,3,4,5"
    
    arr1.push([6,7]);
    alert(arr1)        // 结果为"1,2,3,4,5,6,7"
    
    arr1.pop();
    alert(arr1);       // 结果为"1,2,3,4,5"
    
    
    // unshift shift ------------------------------------------------------------------------------------
    x.unshift(value,...)   
    x.shift()              
    /*
    使用注解:
    x代表数组对象
    value可以为字符串、数字、数组等任何值
    unshift是将value值插入到数组x的开始
    shift是将数组x的第一个元素删除
    */
    
    var arr1=[1,2,3];
    arr1.unshift(4,5);
    alert(arr1);       // 结果为"4,5,1,2,3"
    
    arr1. unshift([6,7]);
    alert(arr1);       // 结果为"6,7,4,5,1,2,3"
    
    arr1.shift(); 
    alert(arr1);       // 结果为"4,5,1,2,3" 

     数组排序-reverse sort

    x.reverse()
    x.sort()
    
    //---------------------------------------------------------------------------------------------------
    var arr1=[32, 12, 111, 444];  
    // var arr1=["a","d","f","c"];
    
    // 当作字符串进行排列,依据ASCII表
    // 颠倒数组元素 --------------------------------
    arr1.reverse();
    alert(arr1.toString());  // 结果为444,111,12,32
    
    // 排序数组元素 --------------------------------
    arr1.sort();    
    alert(arr1.toString());  // 结果为111,12,32,444
    
    
    //---------------------------------------------------------------------------------------------------
    arr=[1,5,2,100];
    arr.sort();  // 1,100,2,5
    
    // 按数字比较 ----------------------------------
    // 详细版
    function intSort(a,b){
        if (a>b){
            return 1;   // -1
        }
        else if(a<b){
            return -1;  // 1
        }
        else {
            return 0
        }
    }
    arr.sort(intSort);  // 1,2,5,100
    
    // 简易版
    function IntSort(a,b){
        return a-b;
    }

     总结js的数组特性

    //  js中数组的特性
             //java中数组的特性,  规定是什么类型的数组,就只能装什么类型.只有一种类型.
             //js中的数组特性1: js中的数组可以装任意类型,没有任何限制.
             //js中的数组特性2: js中的数组,长度是随着下标变化的.用到多长就有多长.
             var arr5 = ['abc',123,1.14,true,null,undefined,new String('1213'),new Function('a','b','alert(a+b)')];
            /*  alert(arr5.length);//8
             arr5[10] = "hahaha";
             alert(arr5.length); //11
             alert(arr5[9]);// undefined */

    Date对象

    创建Date对象

    //方法1:不指定参数
    var nowd1=new Date();
    alert(nowd1.toLocaleString( ));
    
    //方法2:参数为日期字符串
    var nowd2=new Date("2004/3/20 11:12");
    alert(nowd2.toLocaleString( ));
    var nowd3=new Date("04/03/20 11:12");
    alert(nowd3.toLocaleString( ));
    
    //方法3:参数为毫秒数
    var nowd3=new Date(5000);
    alert(nowd3.toLocaleString( ));
    alert(nowd3.toUTCString());
    
    //方法4:参数为年月日小时分钟秒毫秒
    var nowd4=new Date(2004,2,20,11,12,0,300);
    alert(nowd4.toLocaleString());
    //毫秒并不直接显示

    Date对象的方法—获取日期和时间

    /*
    获取日期和时间
    getDate()                 获取日
    getDay ()                 获取星期
    getMonth ()               获取月(0-11)
    getFullYear ()            获取完整年份
    getYear ()                获取年
    getHours ()               获取小时
    getMinutes ()             获取分钟
    getSeconds ()             获取秒
    getMilliseconds ()        获取毫秒
    getTime ()                返回累计毫秒数(从1970/1/1午夜)
    */
    
    //---------------------------------------------------------------------------------------------------
    
    // 例子:
    
    function getCurrentDate(){
            //1. 创建Date对象
            var date = new Date(); //没有填入任何参数那么就是当前时间
            //2. 获得当前年份
            var year = date.getFullYear();
            //3. 获得当前月份 js中月份是从0到11.
            var month = date.getMonth()+1;
            //4. 获得当前日
            var day = date.getDate();
            //5. 获得当前小时
            var hour = date.getHours();
            //6. 获得当前分钟
            var min = date.getMinutes();
            //7. 获得当前秒
            var sec = date.getSeconds();
            //8. 获得当前星期
            var week = date.getDay(); //没有getWeek
            // 2014年06月18日 15:40:30 星期三
            return year+"年"+changeNum(month)+"月"+day+"日 "+hour+":"+min+":"+sec+" "+parseWeek(week);
    }
    alert(getCurrentDate());
    
    // 解决自动补齐成两位数字的方法 ---------------------
    function changeNum(num){
        if(num < 10){
            return "0"+num;
        }else{
            return num;
        }
    }
    
    // 将数字 0~6 转换成 星期日到星期六 -----------------
    function parseWeek(week){
        var arr = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六"];
        //             0      1      2      3 .............
        return arr[week];
    }

    Date对象的方法—设置日期和时间

    /*
    设置日期和时间
    setDate(day_of_month)       设置日
    setMonth (month)            设置月
    setFullYear (year)          设置年
    setHours (hour)             设置小时
    setMinutes (minute)         设置分钟
    setSeconds (second)         设置秒
    setMillliseconds (ms)       设置毫秒(0-999)
    setTime (allms)             设置累计毫秒(从1970/1/1午夜)
    */
    
    var x=new Date();
    x.setFullYear (1997);    // 设置年1997
    x.setMonth(7);           // 设置月7
    x.setDate(1);            // 设置日1
    x.setHours(5);           // 设置小时5
    x.setMinutes(12);        // 设置分钟12
    x.setSeconds(54);        // 设置秒54
    x.setMilliseconds(230);  // 设置毫秒230
    document.write(x.toLocaleString( )+"<br>");
    //返回1997年8月1日5点12分54秒
    
    x.setTime(870409430000); //设置累计毫秒数
    document.write(x.toLocaleString( )+"<br>");
    //返回1997年8月1日12点23分50秒

    Date对象的方法—日期和时间的转换

    日期和时间的转换:
    
    getTimezoneOffset():8个时区×15度×4分/度=480;
    // 返回本地时间与GMT的时间差,以分钟为单位
    toUTCString()
    // 返回国际标准时间字符串
    toLocalString() *****
    // 返回本地格式时间字符串
    Date.parse(x)
    // 返回累计毫秒数(从1970/1/1午夜到本地时间)
    Date.UTC(x)
    // 返回累计毫秒数(从1970/1/1午夜到国际时间)

    正则对象 (RegExp)

    RegExp对象
    
    /*
    1.在表单验证时使用该对象验证用户填入的字符串是否符合规则
    2.创建正则对象方式1 
      参数1 正则表达式 
      参数2 验证模式 (g global / i 忽略大小写) 参数2一般填写g就可以,也有“gi”
    3.用户名首字母必须是英文, 除了第一位其他只能是英文数字和_ . 长度最短不能少于6位 最长不能超过12位
    */
    
    // 创建方式1 ---------------------------
        var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$","g");  // "^[a-zA-Z][a-zA-Z0-9_]{5,11}$" 指规则,"g" 指模式
        // 验证字符串
        var str = "bc123";
        alert(reg1.test(str)); // true
    
    // 创建方式2 ---------------------------
        var reg2 = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/g;  // /填写正则表达式/匹配模式
        alert(reg2.test(str)); // true
    
    
    
    // -----------------------正则对象的方法---------------------------------------------------------------
    
    test方法  ==>  测试一个字符串是否复合 正则规则. 返回值是true 和false.
        
    // -----------String 中与正则结合的4个方法----------
    
        // macth search split replace
    
        var str = "hello world";
    
        alert(str.match(/o/g));        // 取出所有匹配的内容放在数组里
        alert(str.search(/h/g));       // 取出第一个结果的索引值
        alert(str.split(/o/g));        // 按照正则表达式对字符串进行切割,返回数组
        alert(str.replace(/o/g, "s")); // hells wsrld  对字符串按照正则进行替换

    Math对象

    Math对象
    /*
    该对象中的属性方法和数学有关
    Math是内置对象,拿来即用,与Global的不同之处是, 在调用时需要打出 "Math."
    */
    
    // 属性学习:
       alert(Math.PI);
    // 方法学习:
       alert(Math.random());   // (0,1) 获得随机数 0~1 不包括1
       alert(Math.round(1.5)); // 四舍五入
       // 练习:获取0-100的随机整数,包括0和100
       var num=Math.random();
           num=num*10;
           num=Math.round(num);
       alert(num)
    
       // ------------- max min --------------------------
           alert(Math.max(1,2));  // 2
           alert(Math.min(1,2));  // 1 
       // ------------- pow ------------------------------
           alert(Math.pow(2,4));  // pow 计算参数1的参数2次方,即2的4次方
    
    
    /*
    abs(x)     返回数的绝对值
    exp(x)     返回 e 的指数
    floor(x)   对数进行下舍入
    log(x)     返回数的自然对数(底为e)
    max(x,y)   返回 x 和 y 中的最高值
    min(x,y)   返回 x 和 y 中的最低值
    pow(x,y)   返回 x 的 y 次幂
    random()   返回 0 ~ 1 之间的随机数
    round(x)   把数四舍五入为最接近的整数
    sin(x)     返回数的正弦
    sqrt(x)    返回数的平方根
    tan(x)     返回角的正切
    */

    Function 对象·重点

    函数创建方式

    // function 创建方式1 (推荐方式)
    function func1() {
        alert(123);
        return 8
    }
    var ret=func1();
        alert(ret);
    
    // function 创建方式2
    var func2=new Function("参数1","参数n","函数体");
    var add=new Function("a","b","alert(a+b)");

    功能说明:

    • 可以使用变量、常量或表达式作为函数调用的参数

    • 函数由关键字function定义

    • 函数名的定义规则与标识符一致,大小写是敏感的

    • 返回值必须使用return

    函数属性和方法

    // void 方法 ----------------------------------------------------------
    function f() {
       return 8
    }
    alert(void(f()))  // void 表示拦截返回值,不返回任何内容
    
    // 变量 ---------------------------------------------------------------
    function func1() {
        b=4;               // 去掉var 局部变为全局变量
        var b=3            // 推荐采用局部变量
    }
    
    // 对两个参数进行加法 ---------------------------------------------------
    var ret=0
    function func1(a,b) {
        ret=a+b;
        return ret
    }
    alert(func1(1,5,6,9))  // 结果为6,1+5的结果,后面的数字6、9不影响
        // 例子 --------------
        function a(a,b){
            alert(a+b);
        }
        var a=1;
        var b=2;
        a(a,b)  // 报错 a is not a function 

    函数的内置对象arguments

    var ret=0;
    function add() {
        console.log(arguments.length);  // add的长度个数
        console.log(arguments);         // add的所有数
        
    // 用法 1 -------------------------------------------------------------
    for (var i in arguments){           // 计算add   
        ret+=arguments[i]              
    }
    return ret;
    alert(add(1,2,3,4,5));
    
    // 用法 2 -------------------------------------------------------------
    function func2() {
        if (arguments.length!=3){
            throw new Error("param should be 3")
        }
    }
    func2(1,2,3,45);

    匿名函数和自执行函数

    // 匿名函数 创建方式3 ---------------------------------------------------
    var func3=function () {
        alert(123)
    };
    func3();
    
    // 自执行函数 ----------------------------------------------------------
    (function(arg){
        console.log(arg);
    })('123')

    函数的作用域和闭包

    作用域

    js的作用域和py相似,if while等控制语句并没有自己作用域;而函数是有自己的作用域的

    • 作用域链在函数被解释的过程中已经创建(函数做为作用域)
    • 提前声明

    详情参考:五句话搞定JavaScript作用域

    if(1==1){
    
            var s=12;
        }
        console.log(s);//12
    
       // ----------------------
        function f(){
            var temp=666;
        }
        f();
        console.log(temp);//Uncaught ReferenceError: temp is not defined

    嵌套函数的作用域

    // 例 1
    
    var city = 'beijing';
    
        function func(){
            var city = 'shanghai';
            function inner(){
                var city = 'shenzhen';
                console.log(city);
            }
            inner();
        }
        func();
    // 例 2
    
    var city = 'beijing';
    
        function func(){
            var city = 'shanghai';
            function inner(){
                var city = 'shenzhen';
                console.log(city);
            }
            inner();
        }
        func();

    闭包

    var city = 'beijing';
    
    function func(){
        var city = "shanghai";
        function inner(){
            // var city = "langfang";
            console.log(city);
        }
        return inner;
    }
    var ret = func();
    ret();

    BOM对象

    使 JavaScript 有能力与浏览器“对话”

    window对象·重要

    window对象方法

    alert()            显示带有一段消息和一个确认按钮的警告框。
    confirm()          显示带有一段消息以及确认按钮和取消按钮的对话框。
    prompt()           显示可提示用户输入的对话框。
    
    open()             打开一个新的浏览器窗口或查找一个已命名的窗口。
    close()            关闭浏览器窗口。
    setInterval()      按照指定的周期(以毫秒计)来调用函数或计算表达式。
    clearInterval()    取消由 setInterval() 设置的 timeout。
    setTimeout()       在指定的毫秒数后调用函数或计算表达式。
    clearTimeout()     取消由 setTimeout() 方法设置的 timeout。
    scrollTo()         把内容滚动到指定的坐标。
    // ---------- alert confirm prompt ------------------------------------------------------------------
    
        // alert 指 提示
        alert('aaa');
    
        // confirm 指 true和false的返回值
        var result = confirm("您确定要删除吗?");
        alert(result); 
    
        // prompt 参数1:提示信息   参数2:输入框的默认值 返回值是用户输入的内容
        var result = prompt("请输入一个数字!","haha");
        alert(result);
    
    
    // ------- open close -------------------------------------------------------------------------------
    
        // open方法:打开 “合” 一个新的窗口 “并” 进入指定网址   参数1:网址
        // 调用方式1
        open("http://www.baidu.com");
        // 参数1:什么都不填,就是打开一个新窗口  参数2:填入新窗口的名字(一般可以不填)  参数3: 新打开窗口的参数
        open('','','width=200,resizable=no,height=100');  // 新打开一个宽为200 高为100的窗口
        // close方法  将当前文档窗口关闭
        close();

    练习·定时器

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <input type="text" id="clock" style=" 249px">
    <input type="button" value="begin" onclick="begin_click()">
    <input type="button" value="End" onclick="End()">
    <input type="button" value="timeout" onclick="f1()">
    
    <script>
        // timeout -----------------------
        function Timeout() {
            alert(123);
        }
        function f1() {
            var ID=setTimeout(Timeout,1000);
            clearTimeout(ID)
        }
        
        // begin -------------------------
        function begin() {                      
            var stime=getTime();
            var ret=document.getElementById("clock");
            ret.value=stime;
        }
        var ID;                                  
        function begin_click() {
            if (ID==undefined){
                begin();
                ID=setInterval(begin,1000);
            }
        }
        // end ---------------------------
        function End() {
            clearInterval(ID);
            ID=undefined;
        }    
    
    
        function getTime() {
        var date_obj= new Date();
        var year=date_obj.getFullYear();
        var month=date_obj.getMonth()+1;
        var day=date_obj.getDate();
        var hour=date_obj.getHours();
        var minute=date_obj.getMinutes();
        var seconds=date_obj.getSeconds();
        var week=date_obj.getDay();
        return year+""+month+""+f(day)+""+" "+hour+": "+minute+" :"+seconds+" "+num_week(week)
        }
    
        function f(num) {
            if (num<10){
                return "0"+num;
            }
            return num;
        }
        
        function num_week(n) {
            week=["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]
            return week[n]
        }
        
    </script>
    </body>
    </html>

    history对象

    History 对象属性

    History 对象包含用户(在浏览器窗口中)访问过的 URL。

    History 对象是 window 对象的一部分,可通过 window.history 属性对其进行访问。

    length     // 返回浏览器历史列表中的 URL 数量。

    History 对象方法

    back()     // 加载 history 列表中的前一个 URL。
    forward()  // 加载 history 列表中的下一个 URL。
    go()       // 加载 history 列表中的某个具体页面。
    <a href="rrr.html">click</a>
    <button onclick=" history.forward()">>>></button>
    <button onclick="history.back()">back</button>
    <button onclick="history.go()">back</button>

    Location 对象

    Location 对象包含有关当前 URL 的信息。

    Location 对象是 Window 对象的一个部分,可通过 window.location 属性来访问。

    Location 对象方法

    location.assign(URL)      // 加载新文档
    location.reload()         // 刷新本页面
    location.replace(newURL)  // 注意与assign的区别
    <!-- 例子:------------------------------------------------------------>
    
    <input type="button" value="重载" onclick="location.reload()">  <!-- 刷新本页面 -->
    <input type="button" value="重载" onclick="location.href='http://www.baidu.com'">  <!-- 加载到一个新的页面 -->
  • 相关阅读:
    十六、Redis与MySQL数据双写一致性 —— Canal Demo
    十三、redis分布式锁:缓存续命
    十二、redis分布式锁:单机和多机及案例
    十七、缓存双写一致性之更新策略探讨
    十四、Redis的缓存过期淘汰策略
    自定义类型转换器
    [译]. NET 6 新增API 上
    EF 6 新特性三
    EF 6 新特性二
    [译]. NET 6 新增API 下
  • 原文地址:https://www.cnblogs.com/chungzhao/p/13220921.html
Copyright © 2020-2023  润新知