javascript----数据类型总结

来源:互联网 发布:android ble 广播数据 编辑:程序博客网 时间:2024/05/25 18:11

数据类型总结:

1.分类:

基本类型:

1.Number:任意数值

2.String:任意文本

3.Boolean:true/false

4.undefined:undefined

5.null:null

对象()引用)类型:

Object:任意对象

Array:特别的对象类型(有下标/内部数据有序)

Function:特别的对象类型(可执行)

2.用于查看(判断)数据类型(typeof,instanceof,===):

typeof:(返回的是数据类型的字符串表达形式)

可以区别:数值,字符串,undefined,function

不可以区别:null与对象,一般对象与数组

instanceof:

专门用来判断对象数据的类型:Object,Array与Function等

===:

   可以判断:undefined和null

代码示范区:

//1. 基本类型
  var a
  console.log(a, typeof a, a===undefined) // undefined 'undefined' true
  console.log(a===typeof a) // false


  a = 3
  console.log(typeof a === 'number')
  a = 'atguigu'
  console.log(typeof a === 'string')
  a = true
  console.log(typeof a === 'boolean')


  a = null
  console.log(a===null) // true
  console.log(typeof a) // 'object'


  console.log('--------------------------------')


  //2. 对象类型
  var b1 = {
    b2: [2, 'abc', console.log],
    b3: function () {
      console.log('b3()')
    }
  }
  console.log(b1 instanceof Object, typeof b1) // true 'object'
  console.log(b1.b2 instanceof Array, typeof b1.b2) // true 'object'
  console.log(b1.b3 instanceof Function, typeof b1.b3) // true 'function'


  console.log(typeof b1.b2[2]) // 'function'
  console.log(b1.b2[2]('abc')) // 'abc' undefined


2.数据类型中一些特殊的区别:

1.undefined与null的区别?

undefined代表没有赋值

null代表赋值了,只是值为null

代码示范区:

 var a1
  var a2 = null
  console.log(a1, a2)


2.什么时候给变量赋值为null呢?

var  a=null   //a将指向一个对象,但是对象此时还没有确定

a=null   //让a指向的对象成为垃圾对象

代码示范区:

 //初始
  var a3 = null
    //中间
  var name = 'Tom'
  var age = 12
  a3 = {
    name: name,
    age: age
  }
    //结束
  a3 = null





3.严格区别变量类型也数据类型?

js的变量本身是没有类型的,变量的类型实际上是变量内存中数据的类型

变量类型:

1.基本类型:保存基本类型数据的变量

2.引用类型:保存对象地址值的变量

数据对象

1.基本类型

2.对象类型




3.什么是 数据_变量_内存的简介?

1.什么是数据?

存储于内存中代表特定信息的'东西',本质就是010101的二进制

具有可读和可传递的基本特性

万物(一切)皆数据,函数也是数据

程序中所有操作的目标:数据

算术运算

逻辑运算

赋值

调用函数传参

2.什么是内存?

内存条通电后产生的存储空间(临时的)
  * 产生和死亡: 内存条(集成电路板)==>通电==>产生一定容量的存储空间==>存储各种数据==>断电==>内存全部消失
  * 内存的空间是临时的, 而硬盘的空间是持久的
  * 一块内存包含2个数据
    * 内部存储的数据(一般数据/地址数据)
    * 内存地址值数据
  * 内存分类
    * 栈: 全局变量, 局部变量 (空间较小)
    * 堆: 对象 (空间较大)

3.什么是变量?

值可以变化的量,由变量名与变量值组成

一个变量对应一块小内存,变量名用来查找到内存

变量值就是内存中保存的内容

4.内存,数据, 变量三者之间的关系:
  * 内存是一个容器, 用来存储程序运行需要操作的数据
  * 变量是内存的标识, 我们通过变量找到对应的内存, 进而操作(读/写)内存中的数据




关于赋值和内存问题:

代码区:

 var a = 3
  a = function () {


  }


  var b = 'abc'
  a = b
  b = []
  a = b

问题区: var a = xxx, a内存中到底保存的是什么?

第一个: xxx是一个基本数据

第二个:  xxx是一个对象

第三个: xxx 是一个变量




关于引用变量赋值问题:

1.多个引用变量指向同一个对象,通过一个引用变量修改对象内部数据另一个(一些)引用变量也看得见

代码解释区:

var obj1 = {}
  var obj2 = obj1
  obj2.name = 'Tom'
  console.log(obj1.name)
  function f1(obj) {
    obj.age = 12
  }
  f1(obj2)
  console.log(obj1.age)



2.多个引用变量指向同一个对象,让一个引用变量指向另一个对象, 另一个引用变量还是指向原来的对象



代码解释区:

var obj3 = {name: 'Tom'}
  var obj4 = obj3
  obj3 = {name: 'JACK'}
  console.log(obj4.name)
  function f2(obj) {
    obj = {name: 'Bob'}
  }
  f2(obj4)
  console.log(obj4.name)




关于数据传递问题 :

问题:在js调用函数时传递变量参数时,是值传递还是引用传递只是这个值可能是基本数据,也可能是引用(地址)数据

如果后一种看成是引用传递, 那就值传递和引用传递都可以有

代码示范区:

 function f(a) {
    console.log(a)
  }
  var n = 4
  f(n) //传递的是n的值 --->值传递


  function f2(a) {
    a.name = 'atguigu'
  }
  n = {}
  f2(n) // 传递的是n指向的对象 ---> 引用传递   ???
  console.log(n.name)





内存管理:

问题;Js引擎如何管理内存?

1.内存生命周期

1.分配需要的内存

2.使用分配到的内存

3.不需要时将其释放/归还

2.释放内存:

为执行函数分配的栈空间:函数执行完自动释放

存储对象的堆空间内存:当内存没有引用指向时,对象成为垃圾对象垃圾回收器后面就会回收释放此内存



代码示范区:

var obj = {}
  obj = null // ?使对象失去引用


  function fn () {
    var a = 3
    var b = {}
  }
  fn() // ?释放fn局部环境的内存