zoukankan      html  css  js  c++  java
  • JavaScript入门学习之三——内置对象和方法

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

    在前面学习数据基本类型的时候,我们已经了解了Number对象、string对象、Array对象等。看看下面的图

    就介绍了各种数据类型和对应的对象。这里有个要注意的:看一下Python的代码

    a = '123'
    b = str(123)
    print(type(a))
    print(type(b))

    a和b的类型都是string,但是在JavaScript里

    var a ='123'
    var b = new String(123)
    
    console.log(typeof a)
    console.log(typeof b)

    a的类型是string,而b是object 。也就是说new方法是直接新建一个对象的。

    JS中的对象

    JS也是可以直接自定义对象的(有些类似Python中的字典)

    对象的定义

    我们可以直接用类似声明字典的方式来声明一个对象

    var person = {'name':'小强','age':12};
    console.log(person.name);
    console.log(person.age);

    还可以用新建对象并对其赋值的方式来声明

    var person = new Object()
    person.name = "小强"
    person.age = 20
    person.gender = "male"

    那么自定义对象要怎么遍历呢?

    var person = {'name':'小强','age':12}; 
    for(var i in person){
        console.log(i);
        console.log(person[i]);
    }

    这里有一个注意点,在JS内,默认的键值对的key是字符串的话可以不加引号,(加了引号也不会出错),但是值是必须用双引号的(会自动把单引号转换为双引号)。

    对象中的值的获取

    var person = {'name':'小强','age':12}; 
    var k = 'name'
    console.log(person.name)
    console.log(person[k])

    上面的方法列出了直接获取值和间接获取值的两种方法。

    Date对象

    创建Data对象

    Date对象的创建基本上有了前两种方式已经可以了

    //不指定参数
    var d1 = new Date();
    console.log(d1,typeof d1);
    console.log(d1.toLocaleString());//转成字符串格式本地时间
    
    //参数为日期字符串,生成指定时间的Date对象
    var d2 = new Date('2019/11/11 12:20')
    //时间格式比较随意,用-/,.等的都可以
    console.log(d2);
    console.log(d2.toLocaleString());
    console.log(d2.toUTCString());   //转换成字符串格式UTF时间
    
    //参数为毫米数,生成从时间戳到该时间的对象
    var d3 = new Date(5000);
    console.log(d3.toLocaleString())
    
    //参数为年月日小时分钟秒毫秒
    var d4 = new Date(2019,11,11,12,20,11,2000)
    console.log(d4)

    Date对象的方法

    var d = new Date()
    d.getDate()   //获取日期
    d.getDay()    //获取星期
    d.getMonth()
    d.getFullYear()
    d.getHours()
    d.getMinutes()
    d.getSeconds()
    d.getMilliseconds()
    d.getTime() //返回时间戳

    这里试一下,把当前的时间按照“2019-12-12 12:12 星期几”的格式显示出来

    JSON对象

    首先我们要明白JSON格式的对象和JSON格式字符串的区别

    import json
    s = '{"name":"xiaoqiang","age":22}'
    print(json.loads(s))

    上面的字符串s就是一个JSON格式的字符串,那我们看看在JS里的JSON对象的使用

    var s = '{"name":"xiaoqiang","age":22}'
    
    //把字符串转换为JS内部对象
    var ret = JSON.parse(s)
    console.log(ret,typeof ret)
    
    //把JS内部对象转换为字符串
    var ret2 = JSON.stringify(ret);
    console.log(ret2,typeof ret2)

    这是要熟练掌握的,因为在后面的学习中,我们对数据进行传输的时候就需要将数据进行JSON序列化/反序列化。

    RegExp对象

    类似于Python里的正则表达式,但是据说巨坑一堆!

    创建RegExp对象

    //用变量的方式来创建
    var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$")
    var reRet1 = reg1.test('xiaoqia_123')
    //创建了以字母开头,包含字母数字下划线,5-11位长
    
    //直接以字符串的方式创建
    var reRet2 = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/.test('xiaoqiang123');

    第一个坑:正则表达式内一定不能有空格!!!定义字符串长度的时候{5,11},逗号前后不能有空格,否则语法不会报错,但是判断的返回值成了false。

    第二个坑:test()内不传值就相当于传了个underfined,underfined经过正则判定返回值是true。

    >/^[a-zA-Z][a-zA-Z0-9_]{5,11}$/.test()
    <true

    JS正则的两种模式

    1g.——全局匹配

    2.i——忽略大小写

    var s = 'AaBbCc';
    var s1 = s.replace(/a/,'1');
    var s2 = s.replace(/a/g,'1');
    var s3 = s.replace(/a/i,'1');
    var s4 = s.replace(/a/ig,'1');
    
    console.log(s1)    //输出A1BbCc
    console.log(s2)    //输出A1BbCc
    console.log(s3)    //输出1aBbCc
    console.log(s4)    //输出11BbCc

    第三个坑:看看下面的代码

    var r = /abc/g
    console.log(r.test('abc'))    //返回true
    console.log(r.test('abc'))    //返回false
    console.log(r.test('abc'))    //返回true
    console.log(r.test('abc'))    //返回false

    当用正则表达式选用全局模式去检测一个完全匹配的字符串的时候,此时会引出一个lastIndex,lastIndex会记录上一次匹配成功的位置,然后下一次匹配的时候是从这个索引值开始的

    var r = /abc/g
    console.log(r.test('abc'))    //返回true
    console.log(r.lastIndex)      //返回3
    console.log(r.test('abc'))    //返回false
    console.log(r.lastIndex)      //返回0

    那么就还回导致下面的误判

    var r = /abc/g
    console.log(r.test('abc'))    //返回true
    console.log(r.lastIndex)      //返回3
    console.log(r.test('123abc'))    //返回true
    console.log(r.lastIndex)      //返回6

    我们其实是要完全匹配的,但是这里由于匹配是从第3个字符开始的,就返回了true

    总之,就是尽量不要用全局模式去完全匹配字符串。

    Math对象

    math的方法跟Python里的差不多,但是可能发现了,在JS里是不用专门导入方法的,直接用就可以了。

    var x =2;
    var y = 3;
    Math.abs(x)
    Math.exp(x)
    Math.floor(x)   //对x进行下舍入
    Math.max(x,y)
    Math.min(x,y)
    Math.pow(x,y)
    Math.random()   //返回0-1之间的随机数
    Math.round(x)   //取x四舍五入后的整数
    Math.sin(x)
    Math.sqrt(x)
    Math.tan(x)
    Math对象的方法
  • 相关阅读:
    Java面试题
    Mybatis插入数据返回自增主键
    SpringBoot前端给后端传list
    Mybatis学习—XML映射文件
    数据库基础——数据库事务的四大特性以及事务的隔离级别
    数据库基础——锁管理
    数据库基础——索引
    计算机网络面试核心
    蚂蚁金服电话面试问题
    京东架构
  • 原文地址:https://www.cnblogs.com/yinsedeyinse/p/12091094.html
Copyright © 2011-2022 走看看