前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JS对象

JS对象

作者头像
羊羽shine
发布2019-06-11 10:06:41
11.5K0
发布2019-06-11 10:06:41
举报
文章被收录于专栏:Golang开发Golang开发
概述

JavaScript中: js中的对象就是生活中对象的一个抽象, 没有特征和行为,取而代之的是有对应的属性和方法;

代码语言:javascript
复制
    var stu = {
        name : '张三',
        gender: 'M'
        age:20
        learn:function(){
          console.log('学习');
        }
    }

对象 : 是一组无序的键值对的集合 特点 : 1. 声明的变量 = {} []=> 数组 2. 键值对出现 3. 逗号隔开,记住 : 以后再 {} 内一行一行的都是用, 隔开

创建对象
对象字面量

字面量创建对象是最简单的一种方式,语法格式如下

代码语言:javascript
复制
{属性名1:属性值1,属性名2:属性值2,....}

对象字面量以大括号{}定界,其中存储了若干组数信息,每组数据信息已逗号隔开,每组数据内部已冒号:分割,冒号两边分别是属性名和属性值。

代码语言:javascript
复制
    var p = {};
    var p = {
        name : 'zs',
        age:18,
        sayHi:function(){
            console.log(this.name)
        }
    }

注意 :this使用在对象的属性的函数里,,其实地方使用没有意义

Object构造函数

使用构造函数创建对象使用最多,其语法就是使用关键字new来创建一个对象

代码语言:javascript
复制
   var p =  new Object(); // 创建一个空的对象
   var p = new Object({name:"tony"})
   console.log(p.name)

设置对象的属性

代码语言:javascript
复制
    // 语法  对象名.属性 = 值
   var stu = new Object()
    stu.name = "xiaoming"
    stu.age =20

添加方法

代码语言:javascript
复制
    obj.sayHi = function () {
        console.log('大家好,我是' + obj.name);
    }

设置对象的属性的语法 对象.属性 = 值

  1. 如果对象有这个属性,修改这个属性
  2. 如果对象没有这个属性,添加这个属性

获取对象的属性

代码语言:javascript
复制
    // 语法  对象名.属性
    console.log(obj.name);
    console.log(obj.age);
    console.log(obj.gender);
    
    //如果是方法,可以调用
    obj.sayHi();
    
    
    // 获取对象属性的语法:
    // 对象.属性:对象的属性
    // 1. 如果有这个属性,直接返回属性值
    // 2. 如果没有这个属性,返回undefined

delete关键字可以删除对象的属性

代码语言:javascript
复制
    var obj = {name:"zs", age:18}
    delete obj.name;//删除obj的name属性
工厂函数

传统构造函数的创建出来的对象不具备约束性和规范性,如果需要批量创建同一种对象时,会出现大量的冗余代码。 工厂模式是一种广为人知的设计模式,这种模式抽象了创建具体对象的过程,工程模式具体的实现方式是利用函数的特性封装了具体相同属性的函数。

代码语言:javascript
复制
      function createStudent(name, age, sex) {
        var stu = {};
        stu.name = name;
        stu.age = age;
        stu.sex = sex;
        stu.sayHi = function() {
          console.log("大家好,我是"+this.name);
        }
        return stu;
      }
    
      var stu1 = createStudent("zs", 18, "男");
      stu1.sayHi();

优点:可以同时创建多个对象 缺点:创建出来的没有具体的类型,都是object类型的

代码语言:javascript
复制
<script >
   function f (name,age) {
      return{
          name:name,
          age:age
      }
   }
   console.info(f("xiaoming",20))
</script>
自定义构造函数

自定义构造函数是一种特殊的函数。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。

代码语言:javascript
复制
  function Student(name,age) {
      this.name = name;
      this.age = age;
  }
  var stu = new Student('xiaoming',20);
  console.log(stu)

new在执行时会做四件事情 : 1.new会创建一个新的空对象,类型是Student 2.new 会让this指向这个新的对象 3.执行构造函数 目的:给这个新对象加属性和方法 4.new会返回这个新对象

自定义构造函数总结: 1.建议构造函数首字母要大写。 2.构造函数要和new一起使用才有意义。 3.构造函数的作用是用于实例化一个对象,即给对象添加属性和方法。

对象的属性
属性的获取

属性的添加一种是中括号[]模式 一种是小数点模式

属性判断

判断一个属性是否属于某个对象,其语法格式是:

代码语言:javascript
复制
      if (属性名  in  对象) { .. }

eg:

代码语言:javascript
复制
    var obj = {
        name: 'zs'
    }
    if ('name' in obj) {
        console.log('是');
    }

获取对象里的所有属性

代码语言:javascript
复制
    // 结构 :   Object.keys(对象)
    Object.keys(obj)
值类型与引用类型

JS数据类型 简单数据类型:number、string、boolean、undefined、null 复杂数据类型:Array、function, Object

简单数据类型也叫值类型,复杂数据类型也叫引用数据类型,这主要是根据内存存储方式来区分的。

  • 变量在存储简单类型的时候,存的是值本身(值类型)
  • 变量在存储复杂数据类型的时候,存的是引用,也叫地址(类型)
值类型的存储

变量存储数据的时候,存储的直接就是这个值本身。基本数据类型存放在栈内存中。存放在栈内存中的变量大小是固定的,基本数据类型是定长的,分配的内存也是一定的。

代码语言:javascript
复制
   var num = 11;
   var num1 = num;
   num = 20;
   console.log(num);
   console.log(num1);
引用类型的存储

复杂类型: 变量不会存这个对象,对象随机存在内存中,会有一个地址,变量存储的仅仅是这个对象的地址。引用类型存储在堆内存中。堆内存中存放的变量并非定长的,它的值可以动态增加和删除的,存储的空间也是依据数据的大小进行缩小或者扩大

代码语言:javascript
复制
    var obj = {
      name:"zs",
      age:18
    }
    
    var obj1 = obj;
    obj1.name = "ls";
    console.log(obj.name);
    console.log(obj1.name);
对象的类型typeof

typeof 只能判断基本数据类型的类型 instanceof 判断对象的具体类型 constructor.name 也可以获取到对象的具体类型

  • typeof用于查看基本的数据类型, number string boolean undefined
  • typeof如果查看复杂数据类型,返回的都是object类型。
  • typeof null比较特殊,结果是object
  • typeof 函数的结果是function:因为函数是一等公民 // 简单类型 var num1 = 12; var num2 = 'abc'; var num3 = true; var num4 = undefined; var num5 = null; //(object类型) // 复杂类型 (引用类型) function num6() { } var num7 = []; var num8 = {};

方式2 : instanceof 判断

代码语言:javascript
复制
结构 : 对象 instanceof 构造函数
代码语言:javascript
复制
    var arr = [];
    var obj = {}
    var fn = function () {}
    console.log( arr instanceof Array); // true
    console.log( obj1 instanceof Object);// true
    console.log( fn instanceof Function);// true

方式3 : constructor.name

代码语言:javascript
复制
    // 原型的构造函数    
    console.log(arr.constructor.name); //Array
    console.log(obj1.constructor.name); //Object
    console.log(fn.constructor.name); //Function

方式1 : typeof

代码语言:javascript
复制
      console.log(typeof num1);
      console.log(typeof num2);
      console.log(typeof num3);
      console.log(typeof num4);
      console.log(typeof num5);
      console.log(typeof num6);
      console.log(typeof num7);
      console.log(typeof num8);

typeof 总结 : 1.简单基本类型 : number string boolean undefined 2.null => object 3.复杂类型 : object 4.函数 => fuction 一等公民

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.06.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 创建对象
    • 对象字面量
      • Object构造函数
      • 工厂函数
      • 属性的获取
      • 属性判断
  • 自定义构造函数
  • 对象的属性
  • 值类型与引用类型
  • 值类型的存储
  • 引用类型的存储
  • 对象的类型typeof
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档