对象,内置对象Math,基本数据类型(值类型),引用数据类型,堆和栈的理解和区别

106 阅读5分钟

1.对象

概念:

数字是数字对象,字符串是字符串对象。python语言所有的数据类型都是对象

对象这个概念非常的广,他在python语言中就类似于我们的汉语中的“东西”,我们几乎可以把所有的事物都可以成为“东西”

事实上,对象(object)就是python语言对数据的一种抽象的总称

操作:

  • 取值:person.nameperson['name']

  • 赋值:person.name = "xiaowang";person['name'] = "xiaowang"

  • 删除属性:delete person.name

  • 遍历属性:for-in

执行举例:以前面定义的那个person对象为例

//取值
    console.log(person.name);//xiaowang
    console.log(person['name']);//xiaowang

    //赋值
    person.name = "xiaowang";
    person['name'] = "xiaowang";
    console.log(person.name);//xiaowang

    //删除属性
    delete person.name;
    console.log(person.name);//undefined

    //遍历属性
    for(var key in person){
        console.log(key + ":" + person[key]);
    }

    /**
     * 遍历结果如下:
      age:21
      job:Engineer
      sayName:function () {
          alert(this.name);
      }
    */

2.内置对象Math

作用: 用来处理数字数据。

定义对象:

var num = 15;var num = new Number(15);

Math.random()

生成一个0~1之间的随机小数 如果要生成0-54之间的随机整数:

Math.floor(Math.random() * 54)

Math.floor(num)

将num向下取整,取小于等于num的最大整数, 如:

Math.floor(3.1)     //3  Math.floor(3.999)   //3

Math.ceil(num)

将num向上取整数,取大于等于num的最小整数, 如:

Math.ceil(3.1)      //4Math.ceil(3.999)    //4

Math.round(num)

将num四舍五入取整数

Math.pow(x, y)

求 x 的 y 次方 如:

Math.pow(5, 3)      //125

3.数据类型

基本数据类型(值类型)

我们认知的基础数据类型:Number、String、Boolean、undefined、Null

1.String类型

字符串类型中的单引号与双引号的作用效果完全一样

字符串有length属性。可以取得字符串的长度。var str = “hello”;console.log(str.length); //5

字符串的值是不可变的

要改变一个字符串的值,首先要销毁原来的字符串,再用另一个包含新值的字符串去填充该字符串

var lang = “java”;
lang += “script”;

字符串转换

String();//将数据转换程字符串型​
tostring();//将数据转换程字符串型

2.Number类型

Number类型包含整数和浮点数(浮点数数值必须包含一个小数点,且小数点后面至少有一位数字)两种值 浮点数将会自动转换为整数

var num = 1.00;
console.log(num);//1,自动转换为整数

浮点数的最高精度是17位(关于浮点数计算会产生舍入误差问题,其他有些编程语言也会出现类似情况

var num1 = 0.1;
var num2 = 0.2;
console.log(num1 + num2);//0.30000000000000004

NaN:非数字类型

特点:① 涉及到的 任何关于NaN的操作,都会返回NaN

② NaN不等于自身。

var ab = "a1";
console.log(ab/10);// NaN
 console.log(NaN == NaN);// false;

3.Boolean类型

该类型只有两个值,true和false

fasle:0" ", ' ',null,undefined NaN;
true:除了以上数据以外其他情况都是true

Boolean类型转换

转换为boolean值: 转型函数Boolean(),将某个值转换为Boolean类型

4.null类型

null类型被看做空对象指针,null类型也是空的对象引用

只有一个值,即null值,所以,在你 用typeof 操作符去检测null类型的值时,结果是object类型

如果你定义了一个变量,但是想在以后把这个变量当做一个对象来用,那么最好将该对象初始化为null值

5.Undefined类型

只有一个值,即undefined值

使用var声明了变量,但未给变量初始化值,那么这个变量的值就是undefined

引用数据类型

1、引用数据类型也就是对象数据类型:

object,比如:object、array、function、data等;

2、引用类型的值可以改变:

  let person = {name: 'lisa'}
  person.name = 'Jane' // 通过修改对象属性值更改对象
  console.log(person) // 输出:{name: "Jane"}
  person.age = 18 // 给对象增加一个属性
  console.log(person) // 输出:{name: "Jane", age: 18}
  let arr = [1, 2, 3, 4, 5]
  arr[0] = 0 // 更改数组的某一个元素
  console.log(arr) // 输出:[0, 2, 3, 4, 5]
  arr[5] = 6 // 给数组增加一个元素
  console.log(arr) // 输出:[0, 2, 3, 4, 5, 6]

3、添加属性和方法:

  let person = {}
  person.name = 'lisa'
  person.say = function () {
    alert('hello world')
  }
  console.log(person.name)   // 输出:lisa
  console.log(person.say)   // 输出:function () { alert('hello world') }

4、赋值是对象引用:

  let a = {}
  let b = a
  a.name = 'lisa'
  console.log(a.name)  // 输出:lisa
  console.log(b.name)  // 输出:lisa
  b.age = 18
  console.log(a.age)  // 输出:18
  console.log(b.age)  // 输出:18                

5、比较是引用的比较 :

 let man = {} 
 let woman = {}
 console.log(man === woman) // 输出:false

堆和栈

堆和栈的区别:

变量接受的是基本数据类型,则存储它的值。存储在栈里面

变量接受的是引用数据类型,则存储它的地址。值则存储在堆里面

根据空间分配:

栈:由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈,比如js中函数执行栈 堆: 一般由程序员分配释放, 若程序员不释放,程序结束时可能由操作系统回收,分配方式类似于链表

根据缓存方式:

栈:使用的是一级缓存,他们通常都是被调用时处于储存空间中,调用完毕立即释放

比如js中调用一个函数之后,立即释放执行栈,优点是存取速度快

但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性 堆:则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定,需要人为干预释放,所以调用这些对象的速度要相对来得低一些,由于要在运行时动态分配内存,存取速度较慢

根据数据结构区别:

栈:一种先进后出的数据结构,每种类型的数据占用的内存空间的大小是确定的,并由系统自动分配和自动释放。这样带来的好处就是,内存可以及时得到回收,相对于堆来说,更加容易管理内存空间; 堆:可以看做是一棵树,例如:堆排序。 以上都属于计算机基础部分,在此都不详细赘述了,下面我们联系JavaScript来剖析一下堆栈。