第三节:数据类型——Object对象

2023-11-11

Object对象:由属性构成的无序集合;

1、对象与原始类型的区别:

  • 对象有属性;对象对应的值可以是原始数据类型也可以是对象,对象的属性和对应的值这种表示方式称之为键值对,属性名又称之为键名,值称之为键值;键值可以是原始数据类型也可以是对象,也可能是一个方法;
  • 对象有方法;方法其实就是对象的特殊属性(由function对应的一个方法);
  • 对象可以改变(对象的属性可以进行改变)

2、对象的分类(可能有不同的分法)

  • 内部对象,JS有17个内部对象,内部对象又可以分为错误对象(代表各种错误和报错)、常用对象(布尔类型、字符串、数字类型、数组、时间、函数Functon、Object、正则表达式)、内置对象(Math、global、json)
  • 数组对象(常用有:windows和document)
  • 自定义对象
Object(true);//Boolean {true} ,返回一个对象,[[PrimitiveValue]]: true
Object(123);//Number {123} 与布尔值一样
Object('abc');//String {'abc'} 0: "a" 1: "b"  2: "c"  length: 3,字符串不太一样,会有多个属性(0,1,2,长度,原始值)
Object(null); //{}  空对象
Object(undefined); //{} 空对象

3、对象转原始类型

//无论对象是什么转布尔都返回true
Boolean({});//true
Boolean({a:1,b:2});//true
//常见的面试的坑
Boolean(new Boolean(false));//true,使用new操作符来创建一个布尔类型**对象**,传进来一个false,又通过Boolean函数将对象转换为布尔类型
//解析:new Boolean(false)是布尔值的包装对象    typeof (new Boolean(false))  // 'object'  ,所以 转换为boolean是true,而不是false
//原始数据类型是没有方法的,  但是我们却可以有如下用法 
true.toString()   //'true'
//这是因为,在对原始类型使用方法时,会自动通过Boolean()构造一个临时对象,访问的方法均来自这个临时对象,同样的数字和字符串对应有Number()和String() 所以都可以调用方法如(toString());而 undefined 和 null 没有对应的包装对象,所以访问他们的属性会报错
var a='abc';
var b = 123;
var c = false;
var d = null;
var e = undefined;
a.toString();//'abc'
b.toString();//'123'
c.toString();//'false'
d.toString();//报错 Cannot read properties of null (reading 'toString')
e.toString();//报错 Cannot read properties of undefined (reading 'toString')
[{a:1},{a:2},{a:3},{a:4}].toString();//'[object Object],[object Object],[object Object],[object Object]'
new Date().toString();//'Tue Oct 26 2021 17:06:30 GMT+0800 (中国标准时间)'
//toString() 方法可把一个 Number 对象转换为一个字符串,并返回结果

JS内部对象转换为字符串的实现方法:首先调用toString()方法,如果得到字符串则直接返回,如果不能得到字符串会再调用valueOf()方法
JS内部对象转换为数字的实现方法:首先调用valueOf()方法,再调用toString()方法

参考:布尔类型,布尔值只有6个值会转为false,其余都是true

4、创建对象的几种方式

//1、对象直接量创建对象
var person = {name:'json',age:18, work:'doctor'};
console.log(person);//{name: 'json', age: 18, work: 'doctor'}
//2、使用new操作符
var obj = new Object();
obj.name='Tom';
obj.age=20;
console.log(obj);//{name: 'Tom', age: 20}
//3、Object.create() 方式创建
var a = { rep: 'apple' }
var b = Object.create(a)
console.log(b)  // {}
console.log(b.__proto__) // {rep: "apple"}
console.log(b.rep) // {rep: "apple"}

new Object() 和 Object.create() 的区别
new Object() 通过构造函数来创建对象, 添加的属性是在自身实例下。
Object.create() es6创建对象的另一种方式,可以理解为继承一个对象, 添加的属性是在原型下

// new Object() 方式创建
var a = {  rep : 'apple' }
var b = new Object(a)
console.log(b) // {rep: "apple"}
console.log(b.__proto__) // {}
console.log(b.rep) // {rep: "apple"}
// Object.create() 方式创建,Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__,语法:Object.create(proto,[propertiesObject])
//proto  新创建对象的原型对象
//propertiesObject   可选。需要传入一个对象
var a = { rep: 'apple' }
var b = Object.create(a)
console.log(b)  // {}
console.log(b.__proto__) // {rep: "apple"}
console.log(b.rep) // {rep: "apple"}
//传入第二个参数,参数写法参照下面代码
var a={rep:'apple'};
var b = Object.create(a,{
  'property1': {
    value: true,
    writable: true
  },
  'property2': {
    value: 'Hello',
    writable: false
  }});
  console.log(b)//{property1: true, property2: 'Hello'}

5、查找对象的属性

  • 使用点
  • 使用中括号

JS解释器的运行原理:JS解释器碰到点或者中括号前面是不是 null 或undefined,如果是则报错;如果不是则判断点和中括号前面是不是一个对象,如果不是会先转化为对象(这就是为什么基础属于类型也可以使用toString()或者valueOf()方法),转化为对象之后,如果是点则直接把对应的名字返回回来,如果是括号首先将括号的内容进行计算,然后转换为字符串返回回来(例如数组的中括号查找),当属性名称不存在则返回undefined。

var a = 'abc';
a.toString();//'abc'
var person = {name:'json',age:18, work:'doctor'};
person.name;//'json'
person.aa; //undefined
//数组的中括号查找
var arr = ['aa','bb','cc','dd','ee','ff','gg'];
arr[0]; //'aa' ,中括号中为数字,会先将数字转化为字符串,所以下标为字符串也可以查找到对应的值
arr['0'];//'aa', 中括号中为字符串
arr[10]; //undefined,属性10不存在,返回undefined

备注:本内容学习总结来源于喜马拉雅冰山工作室沙翼老师主讲的(陪你读书(JavaScript WEB前端))

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第三节:数据类型——Object对象 的相关文章

  • 我如何能够以两行显示标题,并且每行的字体大小不同?

    我正在使用 Google Chart API 创建时间线图 并希望将图的标题修改为两行 问题 我如何能够显示具有不同字体大小的两线图表标题 电流输出 理想输出 相关研究 我唯一能找到的是有人试图用饼图来做到这一点 但我尝试了但无法使其发挥作
  • Javascript 函数查找数字的倍数

    创建一个名为的函数multiplesOf 它将接受两个参数 第一个参数是数字数组 第二个参数是数字 该函数应返回一个新数组 该数组由参数数组中的每个数字组成 该数字是参数数字的倍数 So multiplesOf 5 6 7 8 9 10 3
  • 为什么我的淘汰单选按钮在另一个具有点击绑定的元素内时会失败?

    我有一个单选按钮列表 我想要点击 li 他们还检查单选按钮 这一切都有效 直到我放了一个name单选元素上的属性 然后我的代码停止工作 我的代码如下所示 ul li li ul li
  • 是否存在 IsCallable 为 false 但 IsConstructor 为 true 的 JS 对象?

    ECMAScript 规范函数可调用 https www ecma international org ecma 262 6 0 index html sec iscallable当且仅当其参数具有 Call 内部方法时返回 true 它在
  • 以编程方式填写reactjs表单

    我正在编写一个用户脚本 但无法填写由reactjs制作的表单 我的代码 document querySelector id username value email protected cdn cgi l email protection
  • Three.js:缩放几何图形后错误的 BoundingBox

    在我的场景中 我有一个简单的立方体 var test new THREE Mesh new THREE CubeGeometry 10 10 10 new THREE MeshBasicMaterial scene add test 该立方
  • 在新的 Google 协作平台 <嵌入 HTML> 中使用 localStorage 和 IndexedDB 不起作用

    我正在尝试将新的 Google 协作平台用于我开发的网页 但是 我在存储本地数据时遇到了问题 本地文件在 Windows 和 Apple safari chrome 中运行良好 从 Google 协作平台尝试一下 没有什么乐趣 此外 在 s
  • 摩卡 - Chai Karma“套件未定义”

    我对 jscript tdd 很陌生 遇到了问题 希望有人能告诉我我在做什么 在浏览器中运行测试 通过 HTML 文件 一切正常 通过节点和业力运行它们我得到以下异常 我想在 node js 主机的 karma 中使用 Mocha 和 Ch
  • 带有淘汰赛js的隐形recaptcha

    我正在完成隐形验证码 但我在实现它时遇到问题 谷歌开发人员页面中的代码显示它应该是这样的
  • 可以在初始 DOM 解析期间/之前修改 DOM 吗?

    是否可以在初始 DOM 解析期间或之前修改 DOM 或者我是否必须等到 DOM 被解析和构建之后才能与其交互 更具体地说 是否有可能阻止 DOM 中的脚本元素使用用户脚本 内容脚本或 Chrome 或 Firefox 中的类似脚本运行 在解
  • React-Redux:state.setIn() 和 state.set() 有什么区别?

    我见过使用setIn and set 在一些react redux代码中 state setIn state set 我在这里找到了一些文档https facebook github io immutable js https facebo
  • 设置 cookie 时中断 JavaScript 执行

    当设置 cookie 时 是否可以始终中断浏览器开发人员工具中的 javascript 执行 无需显式设置 JS 断点 document cookie 在 html head 块的开头添加此代码片段效果很好
  • 使用 CSS 或 Javascript 填充动画

    我只是想知道是否可以使用 CSS 或 javascript 创建填充动画 基本上我想创建一个填充动画 如下图所示 http i40 tinypic com eit6ia png http i40 tinypic com eit6ia png
  • 刷新页面时保存用户的选择

    我目前有一个页面显示不同团队的数据 我有一些数据 用户可以单击使其处于 打开 或 关闭 状态 并为每个数据显示不同的图标 它基本上就像一个清单 只是没有物理复选框 我想记住哪些 复选框 已被选中 即使在用户刷新页面或关闭浏览器并稍后返回之后
  • 从数据库检查数据的异步解决方案各种循环子句

    我想要做的是异步检查数据库并从中获取结果 在我的应用程序中我试图实现Asynchronously将此步骤解决为 从数据库中检查手机号码JsonArray循环子句的种类 Create JsonArray从结果 打印创建的数组 我学到了足够多的
  • 带参数的事件监听器

    我想将参数传递给 JavaScript 中的事件侦听器 我已经找到了解决方案 但我无法理解它们为什么或如何工作以及为什么其他解决方案不起作用 我有 C C 背景 但是 Javascript 函数的执行有很大不同 您能否帮助我理解以下示例如何
  • 用于交互式图形绘制的轻量级 JavaScript 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有兴趣了解用于绘制交互式图表的最轻量级 javascript 库 我掌握的数据主要是与海洋研究相关的科学数据 我知道一些 jquery
  • Javascript Replace() 和 $1 问题

    我正在尝试创建一个脚本来搜索文本中的模式并在它找到的字符串周围包裹一个标签 shop attributes td each function this html function i html return html replace E 0
  • 从 FileReader 设置背景图像样式

    我正在寻找一种解决方案 允许我从文件上传输入中获取文件并通过设置 document body style backgroundImage 来预览它 以下代码用于在 Image 元素中显示预览 function setImage id tar
  • Vue.js[vuex] 如何从突变中调度?

    我有一个要应用于 json 对象的过滤器列表 我的突变看起来像这样 const mutations setStars state payload state stars payload this dispatch filter setRev

随机推荐

  • 量化投资学习——一些牛比的量化投资公司

    Jane Street Jane Street是华尔街最神秘的交易公司 以关注科技和股票交易而闻名 去年他们总交易额达到了5万亿美元 Jane Street公司成立于2000年 目前拥有600多名员工 每天股权交易量高达130亿美元 有消息
  • 多线程造成的资源以及系统状态问题 ==> 多线程造成状态混乱 :参考文章

    为什么80 的码农都做不了架构师 gt gt gt 实战体会Java多线程编程精要 在 Java 程序中使用多线程要比在 C 或 C 中容易得多 这是因为 Java 编程语言提供了语言级的支持 本文通过简单的编程示例来说明 Java 程序中
  • jeesite图片上传并显示

    前几天大哥叫我搞个这的需求出来 上传图片并展示出来 并且后台对图片进行裁剪上传 前端传来的图片是个base64的编码 格式的图片 点击新增 点击上传图片 可进行裁剪 然后上传并且展示出来 前端form页面附上 记住 path路径一定要对上
  • jmeter

    我整理了一下性能测试的一些常见指标 大家看看还有没有需要完善的 性能测试是评估系统在特定工作负载下的能力和可靠性的过程 常见的性能测试指标包括以下几种 1 响应时间 Response Time 系统从接收请求到返回响应所需的时间 2 吞吐量
  • 一文读懂运放规格书参数(2)

    1 电源抑制比 Power supply rejection ratio PSRR 定义 双电源供电电路中 保持负电源电压不变 输入不变 而让正电源产生变化幅度为 VS 频率为 f 的波动 那么在输出端会产生变化幅度为 Vout 频率为 f
  • IEEEE trans模板中怎么使用algorithm2e

    IEEEE trans模板中怎么使用algorithm2e 本文主要记录如何在IEEEE trans模板中使用algorithm2e 避免踩坑 找不到解决方案 目录 IEEEE trans模板中怎么使用algorithm2e 1 注释掉该注
  • 2003系统internet信息服务器,WindowsServer2003创建和管理Internet信息服务器.docx

    F图 F图 Windows Server 2003 实训报告 班级 软件设计10 2姓名学号得分 实训九 创建和管理In ternet信息服务器 实训目的 掌握Web FTP服务器的配置 实训环境 1 装有 Windows Server 2
  • pssh远程批量执行命令

    Pssh pssh是python写的可以并发在多台机器上批量执行命令的工具 它的用法可以媲美ansible的一些简单用法 执行起来速度比ansible快它支持文件并行复制 远程命令执行 杀掉远程主机上的进程等等 杀手锏是文件并行复制 当进行
  • 【Spring Boot】详解restful api

    目录 1 restful api 1 1 历史 1 2 内容 1 3 传参 2 Spring Boot中的Restful Api 1 restful api 1 1 历史 RESTful API Representational State
  • netty入门实例

    Netty 5用户指南 http ifeve com netty5 user guide Netty是一个NIO框架 使用它可以简单快速地开发网络应用程序 比如客户端和服务端的协议 Netty大大简化了网络程序的开发过程比如TCP和UDP的
  • PCL 获取格网最低点(C++详细过程版)

    格网最低点 一 概述 二 代码实现 三 结果展示 1 原始点云 2 滤波结果 一 概述 获取格网最低点在PCL里有现成的调用函数 具体算法原理和实现代码见 PCL GridMinimum获取栅格最低点 为充分了解GridMinimum算法实
  • Mysql binlog 日志

    Mysql binlog 日志 一 Binlog格式介绍 模式1 Row 日志中会记录成每一行数据被修改的形式 然后在slave端再对相同的数据进行修改 优点 row level模式下 bin log中可以不记录执行的sql语句的上下文相关
  • p-value,q-value,FDR

    假阴性错误 false negative errors 高水平的基因可能偶尔没有检测到 假阳性错误 false positive errors 低水平表达的基因由于扩增偏差 可能显得过于丰富 导致假阳性错误 错误发现率 False Disc
  • SQL语句常用记录_count()常用用法以及和group by的组合用法

    之前听大佬说过 会学习的人将资料写下来 不会学习的人妄想将资料记到脑子里 我觉得还是有一定道理的 好记性不如烂笔头 以此篇博客记录我在实际开发中常用到的sql语句 方便以后查看 相信很多用过sql的人 谈到sql语句第一时间想到的就是 se
  • js动态控制表单的tr,td的显示和隐藏

    无论是事先写好的 还是动态生成的 要找到指定的tr或td都必须知道其相关的一个属性 未必必须是id或name 然后无论是在一个table还是多个 table都可以通过document getElementsByTagNames tr 或td
  • 排序算法学习之路——快速排序

    快速排序是由东尼 霍尔所发展的一种排序算法 在平均状况下 排序 n 个项目要 n log n 次比较 在最坏状况下则需要 n2 次比较 但这种状况并不常见 事实上 快速排序通常明显比其他 n log n 算法更快 因为它的内部循环 inne
  • openGL之API学习(一零四)原子计数 Atomic Counters atomic_uint

    原子计数器 Atomic counters 是OpenGL4 2的新功能 能够用于渲染管线的各个阶段 完整的文档规范说明在GL ARB shader atomic counters 原子计数器是一块缓冲区 缓冲区对象 存放了一个或多个整型
  • 重磅直播丨迈向移动数字金融 —— 神州信息并购云核网络线上发布会

    关注神州信息官微 点击底部菜单栏及时关注
  • Vue3的常见30道核心面试题,会vue3的你,是不是的掌握了

    1 什么是Vue3 Vue3有哪些新增特性 答 Vue3是Vue js框架的最新版本 它增加了很多新特性 包括Composition API Teleport Suspense 和Fragment等 2 Vue3 Composition A
  • 第三节:数据类型——Object对象

    Object对象 由属性构成的无序集合 1 对象与原始类型的区别 对象有属性 对象对应的值可以是原始数据类型也可以是对象 对象的属性和对应的值这种表示方式称之为键值对 属性名又称之为键名 值称之为键值 键值可以是原始数据类型也可以是对象 也