资讯专栏INFORMATION COLUMN

JavaScript学习第六天笔记(对象)

Crazy_Coder / 347人阅读

摘要:宿主对象指的是运行环境提供的对象。不过类型是中所有类型的父级所有类型的对象都可以使用的属性和方法可以通过的构造函数来创建自定义对象。当以非构造函数形式被调用时,等同于。对象初始化器方式使用对象初始化器也被称作通过字面值创建对象。

对象 概述

在JavaScript中的对象,和其他编程语言中的对象一样,可以比照现实生活中的对象来理解它。

对象的分类

1.内置对象/原生对象
就是JavaScript运行环境提供的对象。在ECMAScript标准定义,由JavaScript解释器/引擎提供具体实现。
2.宿主对象
指的是JavaScript运行环境提供的对象。一般是由浏览器厂商提供实现的(目前也有独立的JavaScript解释器/引擎提供实现),主要分为BOM和DOM。
3.自定义对象
就是由开发人员自主创建的对象。

Object对象 概述

Object类型与Array、Math等一样都是JavaScript的引用类型。不过Object类型是JavaScript中所有类型的父级(所有类型的对象都可以使用Object的属性和方法).
JavaScript可以通过Object的构造函数来创建自定义对象。当以非构造函数形式被调用时,Object等同于new Object()。

Object对象的方法

Object对象的方法分为自有方法和原型方法两种:
1.自由方法
a.creat() 值原定对象和属性来创建一个新的对象
b.getOwnPropetyNames() 返回一个数组,它包含了指定对象所有的可枚举或不可枚举的属性名。
c.keys() 返回一个数组,包含指定对象的所有自由可遍历属性的名称。
2.原型方法
prototype.hasOwnProperty() 返回一个布尔值,该值指示对象是否包含制定的属性。

对象初始化器方式

使用对象初始化器也被称作通过字面值创建对象。通过对象初始化器创建对象的语法如下:

  var 函数名 ={
  属性名:属性值,
  方法名:function(){
    }
  }

示例代码如下:

var obj1 = {
    name:"EVA",
    age:14,
    sayMe:function(){
           console .log("EVA001");
           }
        }
对象构造函数方式

利用Object作为构造函数创建对象
var 对象名 = new Object();
var 对象名 = Object();

var obj2 = new Object();
var obj3 = Object();

console.log(obj2);// {}
console.log(obj3);// {}

var obj4 = new Object(undefined);
var obj5 = new Object(null);

console.log(obj4);
console.log(obj5);
利用Object.create()方法创建对象

var 对象名 = Object.create(null) -> 创建一个空对象
var 对象名 = Object.create(obj)
obj - 表示另一个对象
特点 - 当前创建的新对象拥有与obj对象相同的属性和方法

var obj6 = Object.create(null);
var obj7 = Object.create(obj1);
console.log(obj6);
console.log(obj7);
创建空对象的方法

1.var obj1 = {};
2.var obj2 = new Object();
3.var obj3 = Object();
4.var obj4 = new Object(undefined);
5.var obj5 = new Object(null);
6.var obj6 = Object(undefined);
7.var obj7 = Object(null);
8.var obj8 = Object.create(null);

对象的复制
var obj1 = {
    name : "123",
    sayMe : function(){
        console.log("THIS IS 123");
    }
}
console.log(obj1);

var obj2 = obj1;
console.log(obj2);

// 修改obj1对象的name属性值
obj1.name = "456";
console.log(obj1);
console.log(obj2);
调用对象的属性
var obj = {
name:"Chambers",
"Type-Content":"text/html",
sayMe : function(){
         console .log("Gemini");
         }
}

1.对象名.属性名(不适用于复杂命名的属性)
console .log(obj.name);//输出结果:Chambers
2.对象名[属性名]-通用的调用方式,适用于复杂命名的属性名称
console .log(obj["name"]);//输出结果:Chambers
注意:当访问一个对象不存在的属性的值为undefined

新增对象的属性
var obj = {
    name : "张无忌",
    sayMe : function(){
        console.log("我是张无忌");
    }
}
/*
    1.对象名.新的属性名 = 属性值
    2.对象名[新的属性名] = 属性值
 */
obj.age = 18;
console.log(obj);

空对象默认没有自身的属性和方法(有父级Object的)

var obj1 = {};
console .log(obj1);
obj1.name = "EVA";
console .log(obj1);
修改对象的属性

1.对象名.已存在的属性名 = 属性值
2.对象名.[已存在的属性名] = 属性值

var obj {
name :"GEMINI";
sayMe : function(){
  console .log("this is eva");
  }
}
obj.name = "eva";
console .log(obj);
删除对象的属性

1.delete 对象名.属性名
2.delete 对象名[属性名]

var obj ={
name:"EVA",
sayMe:function(){
console .log("this is eva");
   }
}
delete obj.name;
console .log(obj.name);//undefined
检测对象的属性
var obj = {
    name : "张无忌",
    age : 18
}

console.log(obj.age);// undefined

// 1.判断对象的属性值是否为 undefined
if (obj.age !== undefined) {
    console.log("obj对象的age属性存在...");
} else {
    console.log("请先定义obj对象的age属性...");
}

// 2.判断对象的属性值 - 先转换为Boolean类型
if (obj.age) {
    console.log("obj对象的age属性存在...");
}

// 3.利用in关键字进行判断
if ("age" in obj) {
    console.log("obj对象的age属性存在...");
} else {
    console.log("obj对象的age属性不存在...")
}

// 4.Object类型提供了hasOwnProperty()方法
if (obj.hasOwnProperty("age")) {
    console.log("obj对象的age属性存在...");
} else {
    console.log("obj对象的age属性不存在...")
}
遍历对象的属性
var obj = {
    name : "张无忌",
    age : 18,
    sayMe : function(){
        console.log("我是张无忌");
    }
}
// 1.for...in语句
for (var objAttr in obj) {
    // 通过对象属性或方法对应的值的类型进行区别
    if (obj[objAttr] instanceof Function) {
        // 当前是对象的方法
        obj[objAttr]();
    } else {
        // 当前是对象的属性
        console.log(obj[objAttr]);
    }
}

// 2.Object类型提供了keys()方法 - 只能遍历可枚举的属性
var arr = Object.keys(obj);
for (var v in arr) {
    var objAttr = arr[v];
    // 通过对象属性或方法对应的值的类型进行区别
    if (obj[objAttr] instanceof Function) {
        // 当前是对象的方法
        obj[objAttr]();
    } else {
        // 当前是对象的属性
        console.log(obj[objAttr]);
    }
}

// 3.Object类型提供了getOwnPropertyNames()方法 - 包括不可枚举的属性
var arr = Object.getOwnPropertyNames(obj);
for (var v in arr) {
    var objAttr = arr[v];
    // 通过对象属性或方法对应的值的类型进行区别
    if (obj[objAttr] instanceof Function) {
        // 当前是对象的方法
        obj[objAttr]();
    } else {
        // 当前是对象的属性
        console.log(obj[objAttr]);
    }
}
调用对象的方法
var obj = {
    name : "EVA",
    age : 14,
    sayMe : function(){
        console.log("this is eva");
    }
}
// 1.对象名.方法名()
obj.sayMe();
// 2.对象名[方法名]()
obj["sayMe"]();
新增对象的方法
var obj = {
    name : "eva",
    age : 18,
    sayMe : function(){
        console.log("this is eva");
    }
}
// 1.对象名.新的方法名 = function(){}
obj.sayYou = function(){
    console.log("shinji");
}
console.log(obj);
// 2.对象名[新的方法名] = function(){}
修改对象的方法

1.对象名.方法名 = function(){}
2.对象名[方法名] = function(){}

var obj = {
    name : "EVA",
    age : 18,
    sayMe : function(){
        console.log("this is eva");
    }
}

obj.sayMe = function(){
    console.log("shinji");
}
console.log(obj);
obj.sayMe();
删除对象的方法

1.delete 对象名.方法名
2.delete 对象名[方法名]

var obj = {
    name : "张无忌",
    age : 18,
    sayMe : function(){
        console.log("我是张无忌");
    }
}

delete obj.sayMe;
// 访问对象中不存在的方法 -> 报错(TypeError: obj.sayMe is not a function)
// obj.sayMe();
console.log(obj.sayMe);// undefined
console.log(obj);

// 以属性是否存在的方式进行判断
if ("sayMe" in obj) {
    // 确认目前是一个方法
    if (obj.sayMe instanceof Function) {
        obj.sayMe();// 方法调用
    }
}
// 以上代码可以优化为以下代码
if ("sayMe" in obj && obj.sayMe instanceof Function) {
    obj.sayMe();// 方法调用
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108140.html

相关文章

  • 26天学通前端开发(配资料)

    摘要:网上有很多前端的学习路径文章,大多是知识点罗列为主或是资料的汇总,数据量让新人望而却步。天了解一个前端框架。也可以关注微信公众号晓舟报告,发送获取资料,就能收到下载密码,网盘地址在最下方,获取教程和案例的资料。 前言 好的学习方法可以事半功倍,好的学习路径可以指明前进方向。这篇文章不仅要写学习路径,还要写学习方法,还要发资料,干货满满,准备接招。 网上有很多前端的学习路径文章,大多是知...

    blair 评论0 收藏0
  • 第五六天

    摘要:上面让我看看一些概念直接做任务感觉还是对我来说太难了,完全没有思路,主要还是看别人代码还好能看到别人提交的,看懂然后自己敲一遍,其实好像这样也能有一点小收获,总好过放弃不做吧引用一个笔记第五六天 2019.4/4 大概六个小时?不想记时间了感觉= =感觉好像对我没啥影响 今天学到了什么? 盒模型 浮动 编码规范 尝试了一下提交代码到github 今天遇到了什么问题,以及情况 其实是...

    leanote 评论0 收藏0
  • 第五六天

    摘要:上面让我看看一些概念直接做任务感觉还是对我来说太难了,完全没有思路,主要还是看别人代码还好能看到别人提交的,看懂然后自己敲一遍,其实好像这样也能有一点小收获,总好过放弃不做吧引用一个笔记第五六天 2019.4/4 大概六个小时?不想记时间了感觉= =感觉好像对我没啥影响 今天学到了什么? 盒模型 浮动 编码规范 尝试了一下提交代码到github 今天遇到了什么问题,以及情况 其实是...

    darry 评论0 收藏0
  • 六天-《企业应用架构模式》-会话状态

    摘要:无状态的价值无状态可以仅用很少的对象就可以处理很多的用户,空闲状态的用户越多,无状态服务器就越有用会话状态相关性会话状态只与当前会话有关,它存在于业务事务中,与其他会话及他们的业务事务是分开的与记录数据信息的区别记录数据时长期保存在数据库中 1. 无状态的价值: 无状态可以仅用很少的对象就可以处理很多的用户,空闲状态的用户越多,无状态服务器就越有用 2. 会话状态: 相关性:会话状态只...

    FrancisSoung 评论0 收藏0
  • vue六天

    摘要:路由路由通俗解释根据不同地址,出现不同效果,一般是用来写应用,单页面应用这里用的是版本一个路由的基本结构跟用法引入路由文件主页跳转链接里面也是写新闻展示内容准备一个根组件组件都准备我是主页我是新闻准备路由关联启动路由是作用范围 vue 路由 路由通俗解释:根据不同url地址,出现不同效果,一般是用来写SPA应用,单页面应用 这里用的是vue-router 0.7.13版本一个路由的基本...

    李昌杰 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<