zoukankan      html  css  js  c++  java
  • day 51 js 函数 date 对象 JSON正则

    上节回顾:

    y51
    
    1. 前情回顾
    
        JS语法基础部分
            1. JS发展史 ES6 (ECMAScript 20162. JS代码在HTML中的两种引用方式
                1. <script>直接写代码</script>
                2. 1. <script src="js文件"></script>
            3. 注释
                1. 单行注释  //
                2. 多行注释  /* ... */
            4. 语句结束符 --> ;
            5. 变量命名规范
                1. 数字、字母、下划线、$
                2. 不能以数字开头
                3. 推荐使用驼峰命名方式
        JS数据类型
            1. 数字类型
                1. 常用属性和方法
                    parseInt()
                    parseFloat()
                
                NaN  --> 表示非数字
                
            2. 字符串类型
                1. 字符串常用属性和方法
                
            3. 布尔类型
                true和false
                
            4. 数组
                类似于Python中的列表
                sort()是有毒的
                
            5. 对象
                类似于Python中的字典
                
            6. 判断数据类型 --> typeof
            
            7. null和undefined
                null --> 表示值为空
                undefined --> 表示变量声明了但是没有赋值/函数没有定义返回值默认返回undefined
                    
            
        运算符
            1. 数学运算符
            2. 逻辑运算符
            3. 比较运算符
                1. ==
                2. === 强等于 --> 既判断类型也判断值
            4. 赋值运算符
            5. 三元运算
                条件 ? 值1: 值2  --> 条件是true是值1,false的话就是值2
                Python里面的三元运算:
                    值1 if 条件 else 值2
                    
        条件判断和流程控制
        
            if判断
                if (条件) {
                   条件成立要做的事儿;
                } else {
                    条件不成立要做的事儿;
                }
                
                if (条件) {
                   条件成立要做的事儿;
                } else if (条件2) {
                    条件2成立要做的事儿;
                } else {
                    条件都不成立要做的事儿;
                }
            
            switch
                switch (v) {
                    case 值1: 执行的代码;break;
                    case 值2: 执行的代码;break;
                    case 值3: 执行的代码;break;
                    default: 上面条件都不成立执行的代码;
                }
                
                注意:
                    break;
                    
            for循环
            
                for (var i=0;i<长度;i++) {
                    循环执行的代码;
                }
                
                for (var i in obj) {
                    console.log(i);
                }
            
            while循环
                
                while (条件) {
                    循环执行的代码;
                }
                
    上节回顾课堂笔记

    今日内容:

    2. 今日概要
    
            函数 *****
            
                1. 函数的定义
                    function 函数名(参数1, 参数2){
                        函数体;
                        return 返回值;
                    }
            
                    匿名函数
                        python中是 lambda --> lambda 参数: 返回值
                        
                        JS中  
                    自执行函数
                        (function(){})(arg);
                    闭包
                        类似于Python中
                        内部函数可以访问外部函数的变量
                        
                2. Date对象
                    1. month是0~11
                    2. day是星期,0~6
                    3. 获取年份用.getFullYear
                
                3. JSON序列化  *****
                    python中:
                        1. import json
                        2. 序列化(把对象转换成字符串)     --> json.dumps(obj)
                        3. 反序列化(把字符串转换回对象) --> json.loads(str)
                    
                    JS中:
                        1. 序列化(把对象转换成字符串)     --> JSON.stringify(obj)
                        2. 反序列化(把字符串转换回对象) --> json.parse(str)
                        
                4. 正则表达式
                    1. Python里面:
                        1. import re
                        2. p1 = re.compile("^[a-zA-Z][a-zA-Z0-9_]{5,11}$")
                        3. p1.match()
                        4. p1.search()
                        5. p1.findall()
                        匹配模式:
                            忽略大小写 re.I
                            贪婪模式 (课下自己在回头复习一下)
                            
                    2. JS
                        两种方式:
                        1. RegExp对象方式
                            1. var p = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$", "g")
                            2. p.test(str)
                        2. 简写方式
                            /正则表达式/匹配模式
                            
                5. Math对象
                    Python里面:
                        直接使用maxmin 
                    JS里面:
                        通过Math对象来做数学相关操作的
                        Math.min()
                        Math.max()
                        Math.floor()
                        ...
                
                幂(mi四声)
                
            
    3. 今日作业
        1. 今天课上的内容,整理博客或笔记 课上练习自己写一下
        2. 抽屉作业
        3. 预习BOM和DOM
    今日内容课堂笔记

    一、函数

    1、函数定义

    JavaScript中的函数和Python中的非常类似,只是定义方式有点区别。

    // 最基础的函数定义
    function f1() {
        console.log("Hello world!");
    }
    f1();
    
    // 带参数的函数
    function f2(name,age) {
        console.log("姓名: "+ name+" 年龄:"+age);
    }
    f2("Alex",18);
    
    // 带返回值的函数
    function f3(arg1,arg2) {
        return arg1+arg2;
    }
    var s=f3("Alex ","shuaib");
    console.log(s);
    
    // 匿名函数
    var sum=function (arg1,arg2) {
        return arg1+arg2;
    };
    ret=sum(1,2);
    console.log(ret);
    
    // 立即执行函数
    (function (arg1,arg2) {
        // n=1000;相当于定义了一个全局变量
        n=1000;
        var m=100;
        console.log("自执行函数:"+(arg1+arg2));
    })(10,20);
    函数定义
    // 普通函数定义
    function f1() {
      console.log("Hello world!");
    }
    
    // 带参数的函数
    function f2(a, b) {
      console.log(arguments);  // 内置的arguments对象
      console.log(arguments.length);
      console.log(a, b);
    }
    
    // 带返回值的函数
    function sum(a, b){
      return a + b;
    }
    sum(1, 2);  // 调用函数
    
    // 匿名函数方式
    var sum = function(a, b){
      return a + b;
    }
    sum(1, 2);
    
    // 立即执行函数
    (function(a, b){
      return a + b;
    })(1, 2);

     2、函数的全局变量和局部变量

    局部变量

    在JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它(该变量的作用域是函数内部)。只要函数运行完毕,本地变量就会被删除。

    全局变量:

    在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。

    变量生存周期:

    JavaScript变量的生命期从它们被声明的时间开始。

    局部变量会在函数运行以后被删除。

    全局变量会在页面关闭后被删除。

     3、作用域

    首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层。

    几个例子:

    (1)

    var city = "BeiJing";
    function f() {
      var city = "ShangHai";
      function inner(){
        var city = "ShenZhen";
        console.log(city);
      }
      inner();
    }
    
    f();  //输出结果是?
    局部作用域

    (2)

    var city = "BeiJing";
    function Bar() {
      console.log(city);
    }
    function f() {
      var city = "ShangHai";
      return Bar;
    }
    var ret = f();
    ret();  // 打印结果是?
    全局作用域

    (3)

    var city = "BeiJing";
    function f(){
        var city = "ShangHai";
        function inner(){
            console.log(city);
        }
        return inner;
    }
    var ret = f();
    ret();
    闭包

    二、内置对象和方法

     JavaScript中的所有事物都是对象:字符串、数字、数组、日期,等等。在JavaScript中,对象是拥有属性和方法的数据。

    我们在学习基本数据类型的时候已经带大家了解了,JavaScript中的Number对象、String对象、Array对象等。

    1、自定义对象

    类似于(某方面类似)Python中的字典数据类型

    var a = {"name": "Alex", "age": 18};
    console.log(a.name);
    console.log(a["age"]);

    遍历对象中的内容:

    var a = {"name": "Alex", "age": 18};
    for (var i in a){
      console.log(i, a[i]);
    }

    https://stackoverflow.com/questions/684672/how-do-i-loop-through-or-enumerate-a-javascript-object

    创建对象:

    var person=new Object();  // 创建一个person对象
    person.name="Alex";  // person对象的name属性
    person.age=18;  // person对象的age属性

    扩展: 

    // 父类构造函数
    var Car = function (loc) {
      this.loc = loc;
    };
    
    // 父类方法
    Car.prototype.move = function () {
      this.loc ++;
    };
    
    // 子类构造函数
    var Van = function (loc) {
      Car.call(this, loc);
    };
    
    // 继承父类的方法
    Van.prototype = Object.create(Car.prototype);
    // 修复 constructor
    Van.prototype.constructor = Van;
    // 扩展方法
    Van.prototype.grab = function () {
      /* ... */
    };
    JavaScript面向对象之继承

    三、Date对象

    1、创建Date对象

    // 方法1:不指定参数
    var d1=new Date();
    console.log(d1.toLocaleDateString());
    
    // 方法2:参数为日期字符串
    var d2=new Date ("2004/3/20 11:12" );
    console.log(d2.toLocaleDateString());
    var d3=new Date("04/03/20 11:12");
    console.log(d3.toLocaleDateString());
    
    // 方法三:参数为毫秒数
    var d4=new Date(5000);
    console.log(d4.toLocaleDateString());
    console.log(d4.toUTCString());
    
    // 方法四:参数为年月日分钟秒毫秒
    var d5=new Date(2004,2,20,11,12,0,300);
    console.log(d5.toLocaleDateString());  //毫秒并不直接显示

    2、Date对象的方法

    var d = new Date(); 
    //getDate()                 获取日
    //getDay ()                 获取星期
    //getMonth ()               获取月(0-11//getFullYear ()            获取完整年份
    //getYear ()                获取年
    //getHours ()               获取小时
    //getMinutes ()             获取分钟
    //getSeconds ()             获取秒
    //getMilliseconds ()        获取毫秒
    //getTime ()                返回累计毫秒数(从1970/1/1午夜)

     

    /**
     * Created by Administrator on 2017/12/27.
     */
    
    // 将当前日期输出为 “2017-12-27 11:11 星期三”格式
    
    function getNow() {
        var d = new Date();  // 获取当前的日期对象
        var dYear = d.getFullYear();  // 获取当前年份
        var dMonth = d.getMonth();  // 获取当前月份
        var dDate = d.getDate();  // 获取当前日期
        var dHour = d.getHours();  // 获取当前小时
        var dMinute = d.getMinutes();  // 获取当前分钟
        var dWeek = d.getDay();  // 获取当前星期
    
        var weekStr = [ "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
    
        // switch (dWeek) {
        //     case 0: dWeek="星期日";break;
        //     case 1: dWeek="星期一";break;
        //     case 2: dWeek="星期二";break;
        //     case 3: dWeek="星期三";break;
        // }
        if (dMinute < 10){
            dMinute = "0" + dMinute;
        }
        console.log(dYear + "-" + (dMonth+1) + "-" + dDate + " " + dHour + ":" + dMinute + " " + weekStr[dWeek]);
    
    }
    getNow();
    小例子

    练习:

    编写代码,将当前日期按“2017-12-27 11:11 星期三”格式输出。

    详细Date对象方法:点我

    四、JSON对象

    var str1 = '{"name": "Alex", "age": 18}';
    var obj1 = {"name": "Alex", "age": 18};
    // JSON字符串转换成对象
    var obj = JSON.parse(str1); 
    // 对象转换成JSON字符串
    var str = JSON.stringify(obj1);

    // JSON序列化和反序列化
    var o={"name":"Alex","age":18};
    // 序列化
    var s=JSON.stringify(o);
    console.log(o,typeof o);
    console.log(s,typeof s);
    
    // 反序列化
    var obj=JSON.parse(s);
    console.log(obj,typeof obj);
    小例子

    五、RegExp对象

    //RegExp对象
    
    //创建正则对象方式1
    // 参数1 正则表达式(不能有空格)
    // 参数2 匹配模式:常用g(全局匹配;找到所有匹配,而不是在第一个匹配后停止)和i(忽略大小写)
    
    // 用户名只能是英文字母、数字和_,并且首字母必须是英文字母。长度最短不能少于6位 最长不能超过12位。
    
    // 创建RegExp对象方式(逗号后面不要加空格)
    var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$");
    
    // 匹配响应的字符串
    var s1 = "bc123";
    
    //RegExp对象的test方法,测试一个字符串是否符合对应的正则规则,返回值是true或false。
    reg1.test(s1);  // true
    
    // 创建方式2
    // /填写正则表达式/匹配模式(逗号后面不要加空格)
    var reg2 = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/;
    
    reg2.test(s1);  // true
    
    
    // String对象与正则结合的4个方法
    var s2 = "hello world";
    
    s2.match(/o/g);         // ["o", "o"]             查找字符串中 符合正则 的内容
    s2.search(/h/g);        // 0                      查找字符串中符合正则表达式的内容位置
    s2.split(/o/g);         // ["hell", " w", "rld"]  按照正则表达式对字符串进行切割
    s2.replace(/o/g, "s");  // "hells wsrld"          对字符串按照正则进行替换
    
    // 关于匹配模式:g和i的简单示例
    var s1 = "name:Alex age:18";
    
    s1.replace(/a/, "哈哈哈");      // "n哈哈哈me:Alex age:18"
    s1.replace(/a/g, "哈哈哈");     // "n哈哈哈me:Alex 哈哈哈ge:18"      全局匹配
    s1.replace(/a/gi, "哈哈哈");    // "n哈哈哈me:哈哈哈lex 哈哈哈ge:18"  不区分大小写
    
    
    // 注意事项1:
    // 如果regExpObject带有全局标志g,test()函数不是从字符串的开头开始查找,而是从属性regExpObject.lastIndex所指定的索引处开始查找。
    // 该属性值默认为0,所以第一次仍然是从字符串的开头查找。
    // 当找到一个匹配时,test()函数会将regExpObject.lastIndex的值改为字符串中本次匹配内容的最后一个字符的下一个索引位置。
    // 当再次执行test()函数时,将会从该索引位置处开始查找,从而找到下一个匹配。
    // 因此,当我们使用test()函数执行了一次匹配之后,如果想要重新使用test()函数从头开始查找,则需要手动将regExpObject.lastIndex的值重置为 0。
    // 如果test()函数再也找不到可以匹配的文本时,该函数会自动把regExpObject.lastIndex属性重置为 0。
    
    var reg3 = /foo/g;
    // 此时 regex.lastIndex=0
    reg3.test('foo'); // 返回true
    // 此时 regex.lastIndex=3
    reg3.test('foo'); // 返回false
    // 所以我们在使用test()方法校验一个字符串是否完全匹配时,不推荐添加全局匹配模式g。
    
    // 注意事项2(说出来你可能不信系列):
    // 当我们不加参数调用RegExpObj.test()方法时, 相当于执行RegExpObj.test("undefined"), 并且/undefined/.test()默认返回true。
    var reg4 = /^undefined$/;
    reg4.test(); // 返回true
    reg4.test(undefined); // 返回true
    reg4.test("undefined"); // 返回true
    View Code

    扩展阅读

    /**
     * Created by Administrator on 2017/12/27.
     */
    
    // 正则相关的示例
    
    // 方式1
        // 第一个参数: 正则表达式
        // 第二个参数: 匹配模式
    var r1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$", "g");
    
    var s1 = "alex123";
    var s2 = "123alex";
    console.log(r1.test());
    console.log(r1.test());
    
    var r2 = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/g;
    console.log(r2.test(s1));
    console.log(r2.test(s2));
    
    // 与字符串自带的方法结合
    var s = "alex 18";
    ret1 = s.search("a");
    ret2 = s.search(/[0-9]{2}/g);
    console.log(ret1);
    console.log(ret2);
    小例子

      六、Math对象

    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)      返回角的正切。
    View Code

     

  • 相关阅读:
    JMeter基础篇--录制web脚本(四)
    jmeter的基础使用(二)
    jmeter安装教程(一)
    delete用法(删除表内容)
    update用法(修改表内容)
    IPy对网段的处理
    netmiko
    读写conf文件
    读写json文件
    excel及数据处理
  • 原文地址:https://www.cnblogs.com/number1994/p/8358973.html
Copyright © 2011-2022 走看看