美文网首页我爱编程
JS初步,类型及转换

JS初步,类型及转换

作者: bzwhlll | 来源:发表于2018-05-23 22:54 被阅读0次

    js里运算时会进行判断,自动进行数据类型的转换。也有手动方法进行转换。

    类型转换

    任意类型转字符串

    String(x)
    x.toString
    x + ''
    

    任意类型转数字

    Number()仅用于纯数字字符串转为数字,有其它字符时会报错

    Number(x)
    parseInt(x,10)
    parseFloat(x)
    x - 0
    + x
    

    任意类型转为布尔值

    Boolean()

    五个falsy值

    0,NaN,' ',null,undefined这5个值在判断中,被转换为布尔值时,会被转换为false

    if (null)
    if (undefined)
    if (0)
    if (NaN)
    if ('')
    if ("")
    

    内存&深浅拷贝

    内存分为堆内存,栈内存。

    • Stack栈内存优点是速度快,但是空间小。
    • Heap堆内存空间大,且是多线程共享的,但是速度慢一点。
    • 对于简单数据,放在stack里,复杂数据类型(如对象)放在heap里。下面是两个例子,涉及深浅拷贝。
    var a = 1
    var b = a
    b = 2
    console.log(b) //2
    console.log(a) //1
    

    上面b = a时,可以理解为在栈里新建了一块地方,并把a的值复制过来。现在stack中有a的位置,值为1,也有b的位置,值为1。a,b各是两座房子。这是深拷贝

    var a = {name: 'hello'}
    var b = a
    b.name = 'b'
    console.log(a.name) //b
    

    上面对b的属性操作时,发现a的属性也变了。
    原因:这里的对象是一个复杂的类型,它里面的数据比较多,增加属性时要占更多的内存,要放一个别墅中。所以这座房子并没有直接存在stack中。stack中有a,但a中只是记录了别墅在heap的位置。
    这里b = a时,栈中新建了地方,放了b,b中记录了数据在heap中的位置。但是数据在heap中并没有新建一块地方并存放。b中记录的位置和a中的相同。也就是说,a,b都指向heap中的同一个位置。对a, b进行操作时,都会使这一个值发生改变。这也是浅拷贝的例子。
    区分数据是存在stack中还是heap中!

    相关文章

      网友评论

        本文标题:JS初步,类型及转换

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