美文网首页
js数据类型

js数据类型

作者: Lichee_3be1 | 来源:发表于2020-02-26 08:57 被阅读0次

    变量提升
    动态类型语言,变量可以随时更改类型
    学es3

    要用到obj.a.b.c.name,必须如下判断,不然如果obj.a不存在,后面求obj.a.b就会报错 image.png 目前还没有引入optional chain,如果引入可以直接 image.png

    js有七种数据类型
    number boolean string null undefined object(array和function二种) symbol(符号)

    number

    有很多类1+.1=1.1,0b11(二进制),011(8进制)

    string

    “”,’‘,’ ‘,双引号单引号都可以,转义

    a='/'',a='/n',a='/t',字符串长度都是1
    

    命令行里面打回车就会换行,所以要\来表示换行,js抄袭这个,多行字符串

    a='aa\
    qqq'
    

    但是容易带出来错误,如果有人要坑你,在\后面还打了空格就完蛋啦

    所以推荐用下面的:

    a='aa'+
    'qqq'
    

    es6引入了下面方法,用反引号来默认后面是多行字符串

    a=`ddd
    wwww`
    

    boolean

    只有true和false二种

    null类型,值就一个

    undefined,也是一个值

    是js之父的一个bug,都表示什么都没有,但是有一点细微的区别:
    如果一个变量没有值就是undefined(更被js推荐)
    如果想有一个对象,但是现在还不想赋值,就推荐给个值null,

    var obj=null
    

    非对象推荐为undefined

    var n(默认是undefined)
    

    object

    是复杂类型,由上面六种简单类型组成
    哈希表的key是字符串不是变量,取用的时候记得加上双引号,如aa['name'],而且符合标识符的情况下取用可以用aa.name
    哈希表的key可以不加引号,但是这时候必须符合标识符规则

    delete aa['name']
    aa.name//undefined(没有这个value了)
    'name' in aa//false(没有这个key)
    成功清除这个键值对
    
    失败的清除方法
    aa.name=undefined
    'name' in aa//true
    

    遍历对象

    var aa={'1':11;'2':ww}
    for(var key in aa){
    注意:遍历的key的顺序不一定,可能是1先可能是2,对象的键值对就是无序的,所以遍历结果肯定也是无序的
    aa.key不是对应value的,aa.key等价于aa['key'],这里key是变量不是字符串
    
    }
    

    怎么知道变量是哪一种数据类型
    typeof(变量)会返回对应类型,有一个bug就是null对应返回的是object,还是函数返回的是function

    类型转换

    变成字符串

    xxx+‘’;就能把xxx转换成字符串,任何类型的xxx都可以
    window.String(xxx)也可以
    另一种toString(),不是很好用,限制多

    变成bool

    五个falsy值,Boolean(xxx)为false,xxx可以是0,NAN,‘’,null,undefined,
    !!xxx也可以

    变成number

    Number(‘1’)
    parseInt('1',10),考试考,会有nan,能转到哪里是哪里
    parseFloat('1.23')

    xxx-0,常用的,如‘1’-0===1

    +xxx,取正也可以

    内存图

    复杂类型,栈存地址

    var a
    a={self:a}//输出是undefined
    
    var a={}
    a={self:a}//上一步明确了a的地址,所以可以
    
    image.png image.png

    注意第三行,开始会确定a,任何在从右到左执行

    垃圾回收

    如果一个对象没有被引用就是垃圾,将要被回收


    image.png
    image.png

    所以这里不被回收
    加上


    image.png
    就是真正的垃圾了
    或者关掉页面document就没有了,就是垃圾了,但是ie有问题,无法在页面关闭时把他们清除

    浅拷贝和深拷贝

    基本类型都是深拷贝,不互相影响
    复杂类型的对象,浅拷贝其实就是指向一个东西

    用2345降小,在通过jpgpress网站可以进一步压缩图片

    表达式不需要分号结尾。一旦在表达式后面添加分号,则 JavaScript 引擎就将表达式视为语句,这样会产生一些没有任何意义的语句。
    JavaScript 引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升(hoisting),但是还是会显示undefined,表示变量a已声明,但还未赋值。

    下面这些则是不合法的标识符。
    1a // 第一个字符不能是数字
    *** // 标识符不能包含星号
    a+b // 标识符不能包含加号
    -d // 标识符不能包含减号或连词线
    中文是合法的标识符,可以用作变量名。
    var 临时变量 = 1;

    源码中被 JavaScript 引擎忽略的部分就叫做注释,它的作用是对代码进行解释。Javascript 提供两种注释的写法:一种是单行注释,用//起头;另一种是多行注释,放在/**/之间。此外,由于历史上 JavaScript 可以兼容 HTML 代码的注释,所以``也被视为合法的单行注释。但是-->只有在行首,才会被当成单行注释,否则会当作正常的运算。
    NaN是个数字,但是表示含义是非数

    相关文章

      网友评论

          本文标题:js数据类型

          本文链接:https://www.haomeiwen.com/subject/twaihftx.html