js-js系列-数据类型-概念

Posted 有风吹过的地方丨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js-js系列-数据类型-概念相关的知识,希望对你有一定的参考价值。

  1. JS原始数据类型有哪些?引用数据类型有哪些?

    1. 1. 在 JS 中,存在着 6 种原始值,分别是:
         - boolean
         - null
         - undefined
         - number
         - string
         - symbol
      2. 引用数据类型: 对象Object(包含普通对象-Object,数组对象-Array,正则对象-RegExp,日期对象-Date,数学函数-Math,函数对象-Function)
      
  2. 传值赋值和传值赋值

    1. 1. 传值赋值:局部变量所在的栈内存会为该变量开辟一块新的内存空间,通过传来的值为内存进行初始化
      
      2. 传址赋值:通常局部变量为引用变量,(数组引用变量/类引用变量),不会在方法栈内开辟对象的内存,只会在方法栈内开辟引用变量的内存空间,直接操作的是引用变量的地址值所指向的对象
      
      3. 传值赋值不可以改变原变量的内容和地址
      
      4. 传址赋值不可以改变原变量的地址,但可以改变原变量的内容
      
      5. 根本原因:内存
      
      6. 值传递会在方法中开辟局部变量的内存,利用值传递为新开辟的局部变量初始化,局部变量有自己的地址
      
         原变量只是将值传过去了
      
      7. 引用传递不会在方法中开辟对象的内存,只是会给局部的引用变量开辟内存空间,将地址值传递给局部引用变量,但是实际的指向是堆内存
      
  3. 出下面运行的结果,解释原因。

    1. function test(person) {
        person.age = 26
        person = {
          name: \'hzj\',
          age: 18
        }
        return person
      }
      const p1 = {
        name: \'fyq\',
        age: 19
      }
      const p2 = test(p1)
      console.log(p1) // -> ?
      console.log(p2) // -> ?
      
    2. p1:{name: “fyq”, age: 26}
      p2:{name: “hzj”, age: 18}
      
    3. 原因: 在函数传参的时候传递的是对象在堆中的内存地址值,test函数中的实参person是p1对象的内存地址,通过调用person.age = 26确实改变了p1的值,但随后person变成了另一块内存空间的地址,并且在最后将这另外一份内存空间的地址返回,赋给了p2。
      
  4. null是对象吗?为什么?

    结论: null不是对象。

    解释: 虽然 typeof null 会输出 object,但是这只是 JS 存在的一个悠久 Bug。在 JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象然而 null 表示为全零,所以将它错误的判断为 object 。

    
    
  5. toString

  6. valueOf

    1. https://www.cnblogs.com/xiaohuochai/p/5560276.html
    2. https://blog.csdn.net/celi_echo/article/details/100038366

以上是关于js-js系列-数据类型-概念的主要内容,如果未能解决你的问题,请参考以下文章

js-js系列-数据类型-转换

从头认识js-js中的继承

JS-JS模拟实现Promise-源码解析

从头认识js-js的发展历史

从头认识js-js客户端检测

SpringCloud系列十一:SpringCloudStream(SpringCloudStream 简介创建消息生产者创建消息消费者自定义消息通道分组与持久化设置 RoutingKey)(代码片段