JS初步,类型及转换

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中!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,742评论 0 38
  • 最全的iOS面试题及答案 iOS面试小贴士 ———————————————回答好下面的足够了-----------...
    zweic阅读 7,607评论 0 73
  • 陌上少年,眉眼笑微漾。 鲜衣怒马,星唇扬四方。 东曦寒芒凉霓裳, 望舒冰霜诉衷肠。 不思量,意难忘。 心头朱砂,原...
    Coco西柚阅读 2,338评论 1 2
  • 哥伦比亚麦德林,世界上最大的银三角
    qiao老胖阅读 1,124评论 0 0