JS 数据类型转换及堆和栈

数据类型 堆和栈

基本数据类型
  • Number
  • String
  • Boolean
  • Null
  • Undefined

特点:

  1. 存放在栈内存中 栈区包括了 变量的标识符和变量的值

  2. 值是不可变的 不能给基本类型添加属性和方法

    var name = 'jozo';
    name.toUpperCase(); // 输出 'JOZO'
    console.log(name); // 输出  'jozo'
    
    var person = 'jozo';
    person.age = 22;
    person.method = function(){//...};
     
    console.log(person.age); // undefined
    console.log(person.method); // undefined
    

  3. 比较是值的比较 (类型转换)

引用数据类型

​ 引用类型可以拥有属性和方法,属性又可以包含基本类型和引用类型

  • Array
  • Object
  • Function

特点

  1. 值是可变的 可以拥有属性和方法

    var person = {};//创建个控对象 --引用类型
    person.name = 'jozo';
    person.age = 22;
    person.sayName = function(){console.log(person.name);} 
    person.sayName();// 'jozo'
     
    delete person.name; //删除person对象的name属性
    person.sayName(); // undefined
    
  2. 值同时保存在栈内存和堆内存中 栈中保存 变量标识符 和 指向 堆内存中该对象的指针【对象在堆内存中的地址】(对象的引用)

    var person1 = {name:'jozo'};
    var person2 = {name:'xiaom'};
    var person3 = {name:'xiaoq'};
    

  1. 比较的是引用的比较 较两个对象的堆内存中的地址是否相同

    var person1 = {};
    var person2 = {};
    console.log(person1 == person2); // false
    

    简单赋值

    ​ 基本类型在赋值操作后,两个变量是相互不受影响

    var a = 10;
    var b = a;
     
    a ++ ;
    console.log(a); // 11
    console.log(b); // 10
    

    https://images2015.cnblogs.com/blog/1103385/201702/1103385-20170212104557291-1734759923.png

    对象引用

    ​ 两个变量都保存了同一个对象地址,则这两个变量指向了同一个对象

    var a = {}; // a保存了一个空对象的实例
    var b = a;  // a和b都指向了这个空对象
     
    a.name = 'jozo';
    console.log(a.name); // 'jozo'
    console.log(b.name); // 'jozo'
     
    b.age = 22;
    console.log(b.age);// 22
    console.log(a.age);// 22
     
    console.log(a == b);// true
    

类型转换
  1. 转为String

    • .toString() 不可转 null 和 undefined 【报错】

      var bool=true;
      console.log(bool.toString());
      
    • String()都能转

      console.log(String(null))
      
    • 隐式转换

      num + “”,当 + 两边一个操作符是字符串类型,一个操作符是其它类型的时候,会先把其它类型转换成字符串再进行字符串拼接,返回字符串

  2. 转为Number

    • Number() 可以把任意值转换成数值,如果要转换的字符串中有一个不是数值的字符,返回NaN

    • parseInt()

      var a="12.3px";
      console.log(parseInt(a);
      //结果:12.3.  如果第一个字符是数字会解析知道遇到非数字结束.
      var a="abc2.3";
      console.log(parseInt(a);
      结果:返回NaN,如果第一个字符不是数字或者符号就返回NaN.
      
    • parseFloat()字符串转换成浮点数,parseFloat()parseInt()非常相似,不同之处在与,parseFloat()会解析第一个. 遇到第二个.或者非数字结束如果解析的内容里只有整数,解析成整数

    • 隐式转换 字符串除了+以外的

      var str="123";
      var num=str-0;
      console.log(num);
      
  3. 转为Boolean

    • 0 ‘’(空字符串) null undefined NaN 会转换成false 其它都会转换成true

    • Boolean()

      console.log(Boolean(1))
      
    • var message;
      if(message){};
      
    • 隐式转换!!

      var str="123";
      var bool=!!str;
      console.log(str)
      
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值