day74-JS-内置对象和方法

内置对象和方法
    var s1 = "abc"和var s2 = new String("abc")的区别:typeof s1 --> string而 typeof s2 --> Object
    注意:内置对象首字母都是大写。

1. 自定义对象:
    1.1 JavaScript的对象(Object)本质上是键值对。键在JS里面叫属性。
    var a = {"name": "Alex", "age": 18};
    console.log(a.name);
    console.log(a["age"]);
    
    1.2 遍历对象中的内容:
    for(var i in a){
        console.log( i, a[i] )
        };
    结果是name Alex
               age 18
    
    1.3 键的引号可有可无:
    var person2 = {name:'tom',age:18};  
        输入person2的结果是Object { name: "tom", age: 18 }
    var person3 = {'name':'tom','age':18};  
        输入person3的结果是Object { name: "tom", age: 18 }

    1.4 创建对象
        var person4 = new Object();    //创建对象
        person4.name = 'marry';    //添加键值对(属性值)
        person4['age'] = 18;        //添加键值对(属性值)

    注意:
        var name = 'abc';
        var person = {
            name:'tom',
            age:18,
            abc:123
            };
        执行person[name],结果是123

2. Date对象
    2.1 创建Date对象
        //方法1:不指定参数,当地时间
        var d1 = new Date();
        console.log(d1.toLocaleString());
        结果:    2020/3/4 下午2:30:11

        //方法2:参数为指定日期的字符串
        var d2 = new Date("2004/3/20 11:12");
        console.log(d2.toLocaleString());
        结果:    2004/3/20 上午11:12:00

        //方法3:参数为毫秒数,从1970年开始跑了5000毫秒是什么时间
        var d3 = new Date(5000);
        console.log(d3.toLocaleString());
        console.log(d3.toUTCString());
        结果:    1970/1/1 上午8:00:05 
            Thu, 01 Jan 1970 00:00:05 GMT

        //方法4:参数为年月日小时分钟秒毫秒
        var d4 = new Date(2004,0,20,11,12,0,300);
        console.log(d4.toLocaleString());  //毫秒并不直接显示
        结果:    2004/1/20 上午11:12:00--->上面的0代表1月

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

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

4. Math对象:数学常用方法
    abs(x)      返回数的绝对值。
    floor(x)    对数进行下舍入。Math.floor(5.8)和Math.floor(5.1);结果都是5
    max(x,y)    返回 x 和 y 中的最高值。
    min(x,y)    返回 x 和 y 中的最低值。
    pow(x,y)    返回 x 的 y 次幂。Math.pow(10,2);结果是100
    random()    返回 0 ~ 1 之间的随机数。
    round(x)    把数四舍五入为最接近的整数。Math.round(5.1);结果是5。Math.round(5.5);结果是6。

5. RegExp对象,正则表达式
    5.1 RegExp对象创建方式一:
    var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$");    //创建RegExp对象方式(逗号后面不要加空格)
    var s1 = "bc123";                    //要匹配的字符串
    reg1.test(s1);  // true    //RegExp对象的test方法,测试一个字符串是否符合对应的正则规则,返回值是true或false。

    5.2 RegExp对象创建方式二:
    var reg1 = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/;    //不需要引号

    5.3 简写:/^[a-zA-Z][a-zA-Z0-9_]{5,11}$/.test("bc123");

    5.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"          对字符串按照正则进行替换

    5.5 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"      全局匹配,g是globle
        s1.replace(/a/gi, "哈哈哈");    // "n哈哈哈me:哈哈哈lex 哈哈哈ge:18"  不区分大小写

    5.6 注意事项:
        // 注意事项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('xxxfoo'); // 还是返回true
            // 所以我们在使用test()方法校验一个字符串是否完全匹配时,一定要加上^和$符号。

        // 注意事项2:
        // 当我们不加参数调用RegExpObj.test()方法时, 相当于执行RegExpObj.test("undefined"), 并且/undefined/.test()默认返回true。
            test()的()不能为空
            var reg4 = /^undefined$/;
            reg4.test(); // 返回true
            reg4.test(undefined); // 返回true
            reg4.test("undefined"); // 返回true

        // 注意事项3:不能有空格
        /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/; //{5,11}不能有空格,例如{5, 11}逗号后面有空格,结果就不一样了。