note021js里的类型

2018-01-05  本文已影响0人  slTrust

类型转换

toString()

var a = 1;
var b = true;
var c = {};
var d = null;
var e = undefined;
a.toString() // "1"
b.toString() // "true"
c.toString() // "[object Object]"
d.toString() // 报错
e.toString() // 报错
//老司机怎么把不同类型变成字符串的
a + ''   //  "1"
b + ''  //  "true"
c + ''  //  "[object Object]"
d + ''  //  "null" 
e + ''  //  "undefined"

//智障写法  不同类型是不能 + 的  
// + 如果发现左右任意一边有字符串  就会把另一边转为字符串
1 + '1'    //  字符 "11"    相当于  (1).toString() + '1'
1 + 1  // 数字 2

//变成字符串常用的方法是 与空字符串相加  ‘’+
//除此之外 你可以 window.String(一个变量)   与  ‘’+ 一样

Boolean()方法

Boolean(1) // true
Boolean(2) // true
Boolean(0) // false
Boolean('') //  false
Boolean('  ') // true
Boolean('21321') // true
Boolean({a:11,b:22})  // true
Boolean({}) // true
//老司机
!! true   //true
!! 1  // true
!! 0  // false
!! '' // false
!! ' ' //true
!! {} //true
!! null // false
!! undefined //false
类型转换

5个特殊值 Falsy

number string boolean symbol null undefined object
0 NaN '' null undefined

转为number类型

5种方式如图


类型转换

考点

parseInt('011') // 11
parseInt('011',8) // 9
parseInt('011',10) // 11
parseInt('s') // NaN
parseInt('1s') // 1

内存图

内存分为代码区和数据区 chrome为程序划分100M内存

数据区

栈 && 堆 数据区

简单示例 内存分配过程

引用 复杂类型存的是引用

示例

测试1
  • 测试2
    测试3

self 指向自己

测试3

很贱很贱的面试题

面试题

垃圾回收

GC 如果一个变量没有被引用==>它就是垃圾 ==> 将被回收

var a = {name : 'a'}   // 分配内存地址 33
var b = {name : 'b'}   // 分配内存地址 60
a = b  // a 的内存地址  = b 的内存地址 ==> 60
// a原来的地址 33所占用的内存空间  就是  垃圾

深拷贝 && 浅拷贝

var a = 1;
var b = a;
 b = 2 ;//  b变 a 不变  就是深拷贝(基本类型的赋值都是深拷贝)

要考虑的是 复杂类型 的深拷贝

var a ={ name :'a'}
var b = a ;
b.name = 'b';   //这导致   a.name也变了  (浅拷贝)

复杂类型深拷贝的概念(这里没有实现)


面试题
上一篇下一篇

猜你喜欢

热点阅读