javascrit对象(包括内置对象和存储)

创建对象
在 JavaScript 中,现阶段我们可以采用三种方式创建对象(object):
利用字面量创建对象
利用 new Object 创建对象
利用构造函数创建对象

var star = {
        name: 'pink',
        age: 18,
        sex: '男',
        sayHi: function () {
          alert('大家好啊~');
        },
      };
var andy = new Object();
      andy.name = 'pink';
      andy.age = 18;
      andy.sex = '男';
      andy.sayHi = function () {
        alert('大家好啊~');
      };
function Person(name, age, sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.sayHi = function () {
          alert(
            '我的名字叫:' +
              this.name +
              ',年龄:' +
              this.age +
              ',性别:' +
              this.sex
          );
        };
      }
      var bigbai = new Person('大白', 100, '男');
      var smallbai = new Person('小白', 21, '男');
      console.log(bigbai.name);
      console.log(smallbai.name);

构造函数
1. 构造函数约定首字母大写。
2. 函数内的属性和方法前面需要添加 this ,表示当前对象的属性和方法。
3. 构造函数中不需要 return 返回结果。
4. 当我们创建对象的时候,必须用 new 来调用构造函数。

new Object
第一个字母大写
new Object() :需要 new 关键字
使用的格式:对象.属性 = 值;

new 在执行时会做四件事情:
1. 在内存中创建一个新的空对象。
2. 让 this 指向这个新的对象。
3. 执行构造函数里面的代码,给这个新对象添加属性和方法。
4. 返回这个新对象(所以构造函数里面不需要return)。

遍历对象
for…in 语句用于对数组或者对象的属性进行循环操作。
其语法如下:

for (变量 in 对象名字) {
          // 在此执行代码
      }

语法中的变量是自定义的,它需要符合命名规范,通常我们会将这个变量写为 k 或者 key。

for (var k in obj) {
          console.log(k);      // 这里的 k 是属性名
          console.log(obj[k]); // 这里的 obj[k] 是属性值
      }

小结

  1. 对象可以让代码结构更清晰
  2. 对象复杂数据类型object。
  3. 本质:对象就是一组无序的相关属性和方法的集合。
  4. 构造函数泛指某一大类,比如苹果,不管是红色苹果还是绿色苹果,都统称为苹果。
  5. 对象实例特指一个事物,比如这个苹果、正在给你们讲课的pink老师等。
  6. for…in 语句用于对对象的属性进行循环操作。

内置对象
JavaScript 中的对象分为3种:自定义对象 、内置对象、 浏览器对象
内置对象就是指 JS 语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或是最基本而必要的功能(属性和方法)
内置对象最大的优点就是帮助我们快速开发
JavaScript 提供了多个内置对象:Math、 Date 、Array、String等

Math

Math.PI		 // 圆周率
Math.floor() 	 // 向下取整
Math.ceil()            // 向上取整
Math.round()           // 四舍五入版 就近取整   注意 -3.5   结果是  -3
Math.abs()		 // 绝对值
Math.max()/Math.min()	 // 求最大和最小值
Math.random()随机返回小数,[0,1)

Date

  1. 获取当前时间必须实例化
 var now = new Date();
      console.log(now);
  1. Date() 构造函数的参数
    如果括号里面有时间,就返回参数里面的时间。例如日期格式字符串为‘2019-5-1’,可以写成new Date(‘2019-5-1’) 或者 new Date(‘2019/5/1’)
    如果Date()不写参数,就返回当前时间
    如果Date()里面写参数,就返回括号里面输入的时间

在这里插入图片描述
在这里插入图片描述
秒杀就是用了date内置对象做的

数组
建数组对象的两种方式
1 字面量方式var a = [1, 2];
2 new Array()var arr = new Array();

instanceof 运算符,可以判断一个对象是否属于某种类型
**Array.isArray()**用于判断一个对象是否为数组,isArray() 是 HTML5 中提供的方法

var arr = [1, 23];
var obj = {};
console.log(arr instanceof Array); // true
console.log(obj instanceof Array); // false
console.log(Array.isArray(arr));   // true
console.log(Array.isArray(obj));   // false

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
字符串对象
为了方便操作基本数据类型,JavaScript 还提供了三个特殊的引用类型:String、Number和 Boolean。
基本包装类型就是把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了属性和方法。

// 下面代码有什么问题?
      var str = 'andy';
      console.log(str.length);
      

按道理基本数据类型是没有属性和方法的,而对象才有属性和方法,但上面代码却可以执行,这是因为 js 会把基本数据类型包装为复杂数据类型,其执行过程如下 :

      // 1. 生成临时变量,把简单类型包装为复杂数据类型
      var temp = new String('andy');
      // 2. 赋值给我们声明的字符变量
      str = temp;
      // 3. 销毁临时变量
      temp = null;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
方法用于切分字符串,它可以将字符串切分为数组。在切分完毕之后,返回的是一个新数组。
例如下面代码:

var str = 'a,b,c,d';
      console.log(str.split(','));   // 返回的是一个数组 [a, b, c, d]

字符串小结
要理解基本数据类型被包装为复杂数据类型,string本来是一个基本类型,被包装后也可以像对象一样调用某些方法。

简单类型与复杂类型内存问题
js中也有堆栈的概念,

简单类型/基本数据类型/值类型: string ,number,boolean,undefined,null ,在存储时变量中存储的是值本身

复杂类型又叫做引用类型: Object、Array、Date等 ,在存储时变量中存储的仅仅是地址

堆栈空间分配区别:
  1、栈(操作系统):由操作系统自动分配释放存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈;

2、堆(操作系统):存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收。
  
简单数据类型存放到栈里面
复杂数据类型存放到堆里面

在这里插入图片描述
在这里插入图片描述
当我们把一个值类型变量作为参数传给函数的形参时,其实是把变量在栈空间里的值复制了一份给形参,那么在方法内部对形参做任何修改,都不会影响到的外部变量。

function fn(a) {
        a++;
        console.log(a);//输出11
      }
      var x = 10;
      fn(x);
      console.log(x);//输出10

在这里插入图片描述
函数的形参也可以看做是一个变量,当我们把引用类型变量传给形参时,其实是把变量在栈空间里保存的堆地址复制给了形参,形参和实参其实保存的是同一个堆地址,所以操作的是同一个对象。

function Person(name) {
        this.name = name;
      }
      function f1(x) {
        // x = p
        console.log(x.name); // 2. 这个输出什么 ?
        x.name = '张学友';
        console.log(x.name); // 3. 这个输出什么 ?
      }
      var p = new Person('刘德华');
      console.log(p.name); // 1. 这个输出什么 ?
      f1(p);
      console.log(p.name); // 4. 这个输出什么 ?

在这里插入图片描述
应为是地址所以改变的是同一个对象的内容,所以就会随着改变。

补充字符串不变是指字符串在内存中

var a = '123';
a = '456';

'123’是不会被删除的,只是把’456’赋值给了变量a,改变了a的指向。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值