你不知道的JavaScript---对象

1.语法

对象可以通过两种方式定义:一种是对象字面量形式,一种是构造形式
对象字面量:

var muObject = {key: value
}

构造形式的:

var myObject = new Object()
myObject.key = value

不管是使用对象字面量形式还是构造形式创建出来的对象都是一样的,唯一的区别是用对象字面量创建的对象可以一次性添加多个键值对,而使用构造形式创建的对象你必须逐个为他添加。另外,直观的来看,对象字面量的方式去创建一个对象显然要比构造形式写法上更简洁。一般我们推荐使用字面量的方式去创建对象。

2.类型

对象是JavaScript的基础。在JavaScript中一共有6种主要类型:

  • string
  • number
  • boolean
  • null
  • undefined
  • object

在JavaScript中还有一些对象子类型,我们称之为复杂基本类型,例如:Function、Array。那么同样的也有基本类型:string、number、boolean、null、undefined

2.1内置对象

在JavaScript中是有一些对象子类型的,我们称之为内置对象,这些对象包括:

  • String
  • Number
  • Boolean
  • Object
  • Function
  • Array
  • Date
  • RegExp
  • Error

这些内置对象实际上可以将他们看做是内置函数,可以当做构造函数(通过new来调用函数)来创建对应的对象。

var myObj = new String('string')
muObj // {}
typeof  myObj // "object"
Object.prototype.toString.call(obj) // '[object Object]'
// 实际上是调用了Object.toString方法
var str = "hello!"
str.length // 6

我们看到,hello!只是一个普通的string字符串,并不是一个对象,那为什么可以对这个字符串进行一些操作,比如获取length长度?

那是因为在必要的时候JavaScript会自动将字符串转为一个对象,不需要显式的去创建一个对象,这样就能访问他的属性和方法了,就会很方便了。
对于number也一样的他会调用new Number():

13.456.toFixed(2) // 13.46

null和undefined没有构造形式,只有文字形式,而Date只有构造没有文字形式

3.内容

3.1对象的内容

对象的内容是由一些存储在特定命名位置上的值组成的,我们称之为属性。

之前我的理解是对象的内容通常是存在这个对象容器内部的,其实对象内容存的只是对象的属性名称,这个属性名称就像指针一样指向了属性值的真正存储位置。
对象的访问是通过 . 操作符或者[]操作符。. 操作符被称为属性访问,[]操作符称为键访问。他们两访问的是同一个位置,并且返回值也是相同的。

var myObj = {a: 1
}
myObj.a // 1
myObj['a'] // 1

使用键访问变量的属性名称可以是一个变量,这样他就是一个动态的了,使用起来也更加灵活一些,而且它可以接受任意utf-8字符串作为属性名;再看属性访问它的属性名需要符合一定的命名规范,例如sub-next用属性访问的方式就不符合规范,这样是不行的,键访问就完全可行。

var myObj = {b:2
}
var val = 'b'
myObj[val] // 2

在对象中,属性名永远都是一个字符串,即使你传入一个字符串以外的值作为属性名,他也会先你的值转为字符串的。

3.2. 属性与方法

当一个对象的属性返回函数的时候,我们认为这个函数属于对象,其实不然,只不过是对这个函数的引用

var myObj = {foo: function(){console.log("foo")}
}
var someFoo = myObj.foo
someFoo // Function 
myObj.foo // Function

3.3. 数组

数组也是一个对象,可以通过[]下标来访问数组元素

var arr = [1,2,3,4]
arr.length // 4
arr[3] // 4
arr[4] = 5
arr // [1,2,3,4,5]

3.5. 属性描述符

一个对象的属性有对应的属性描述符,比如创建一个普通对象,他的属性描述符会使用默认值。value: 属性值、writable: 可写、enumerable:可枚举、configurable: 可配置。当然,可以用Object.difineProperty()新建一个属性或对属性进行修改。

var myObj = {a: 2
}
Object.defineProperty(myObj,"a",{value: 3,writable: true,enumerable: true,configurable: true
})
myObj.a // 3
  1. writable

    如果将writable的值设置为false的话,那么这个对象的属性就是不可写的,对他的修改赋值是不会成功的

Object.defineProperty(myObj,"a",{value: 3,writable: false,enumerable: true,configurable: true
})
myObj.a = 3
myObj.a // 2
  1. configurable

对象的属性值不可配置,而且他的修改时一个单向操作,可以将true改为false但是无法将false再改为true。

Object.defineProperty(myObj,"a",{value: 2,writable: true,enumerable: true,configurable: false
})
myObj.a // 2
delete myObj.a 
myObj.a // 2

上面的代码可以看见deltet对myObj对象属性的删除操作并未成功

3.enumerable
enumerable对象属性是否可枚举也就是可遍历的意思。当enumerable设为false时,对于对象的变量,当前这个属性并不会被遍历到

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/72158.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea:java: Compilation failed: internal java compiler error

java: Compilation failed: internal java compiler error错误 检查下面2个即可:

docker 生成镜像的几个问题

docker 生成镜像的几个问题 根据jdk8.tar.gz 打包Jdk8 镜像失败运行镜像报错差不多是网络ip错误,在网上说重启docker即可解决运行mysql5.7.25 镜像失败向daemon.json文件添加内容导致docker重启失败docker run 命令常用参数根据jdk8.tar.gz 打包Jdk8 镜像失败 首选做准备工作…

卡牌类游戏推荐,卡牌类三国手游排行榜

以下是小编要推荐给大家的关于卡牌类三国手游排行榜的内容。这里有来自各个历史阶段的名将和美女,让你体验最真实的三国战役。你可以将各种战略思维运用到其中,感受步步为营的喜悦,最终赢得战火纷飞的三国,如果想了解每个游戏的具…

浅谈安科瑞ADL200仪表在爱尔兰工厂的应用

摘要:用户端消耗着整个电网80%的电能,用户端智能化用电管理对用户可靠、安全、节约用电有十分重要的意义。构建智能用电服务体系,推广用户端智能多功能仪表、智能用电管理终端等设备用电管理解决方案,实现电网与用户的双向良性互动…

失效的访问控制及漏洞复现

文章目录 渗透测试漏洞原理失效的访问控制1. 失效的访问控制1.1 OWASP TOP 101.1.1 A5:2017-Broken Access Control1.1.2 A01:2021-Broken Access Control 1.2 失效的访问控制类别1.2.1 水平越权1.2.2 垂直越权 1.3 攻防案例1.3.1 DVWA越权 1.4 相关漏洞1.4.1 目录遍历1.4.2 未…

【Redis】Bitmap 使用及应用场景

前言:bitmap 占用空间小,查询效率高,在一些场景中使用 bitmap 是一个很好的选择。 一、bitmap 相关命令 SETBIT - 设置指定位置的比特值,可以设为 1 或 0 例如 SETBIT key 10 1,将在 key 对应的 bitmap 中第10位设置为…

explain 实战-----查看hive sql执行计划

目录 1.join/left join/full join 语句会过滤关联字段 null 的值吗? (1)join (2) left join /full join 2.group by 分组语句会进行排序吗? 1.join/left join/full join 语句会过滤关联字段 null 的值吗…

【java】【SSM框架系列】【一】Spring

目录 一、简介 1.1 为什么学 1.2 学什么 1.3 怎么学 1.4 初识Spring 1.5 Spring发展史 1.6 Spring Framework系统架构图 1.7 Spring Framework学习线路 二、核心概念(IoC/DI,IoC容器,Bean) 2.1 概念 2.2 IoC入门案例 …

docker安装RabbitMQ教程

可以通过Docker来安装RabbitMQ,具体步骤如下: 安装Docker:请参考官方文档进行安装。 拉取RabbitMQ镜像:通过以下命令拉取最新版本的RabbitMQ镜像。 docker pull rabbitmq:latest运行RabbitMQ容器:通过以下命令运行Rab…

简单YUV数据转换

YUV是一种亮度信号Y和色度信号U、V是分离的色彩空间,它主要用于优化彩色视频信号的传输,使其向后相容老式黑白电视。其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V”表示的则是色度&…

vue3 defineExpose 显示的指定组件需要暴露的属性

简介&#xff1a; 是 vue3 新增的一个 api &#xff0c;用在 <script setup>中使用&#xff0c;用于显示的把组件的属性和方法暴露出来。可用于父子组件通信&#xff0c;子组件使用 defineExpose 将自身的方法或者属性暴露出去&#xff0c;父组件中通过 ref 获取子组件 D…

Android12.0首次开机默认授予app运行时权限(去掉运行时授权弹窗)第二种方法

1.概述 在12.0的系统产品开发中,在6.0以后对于权限的申请,都需要动态申请,所以会在系统首次启动后,在app的首次运行时,会弹出授权窗口,会让用户手动授予app运行时权限,在由于系统产品开发需要要求默认授予app运行时权限,不需要用户默认授予运行时弹窗,所以需要在首次开…

CH06_第一组重构(上)

提取函数&#xff08;Extract Function |106&#xff09; 曾用名&#xff1a;提炼函数&#xff08;Extract Function&#xff09; 反向重构&#xff1a;内联函数&#xff08;115&#xff09; 示例代码 function printOwing(invoice) {printBanner();let outstanding calcul…

API安全学习 - crAPI漏洞靶场与API测试思路

crAPI漏洞靶场与解题思路 1. 前置基础1.1 认识crAPI1.2 环境搭建1.3 API的分类与鉴别 2. 漏洞验证2.1 失效的对象级别授权挑战1&#xff1a;访问其它用户车辆的详细信息挑战2&#xff1a;访问其它用户的机械报告 2.2 失效的用户身份验证挑战3&#xff1a;重置其它用户的密码 2.…

NIFI实现JSON转SQL并插入到数据库表中

说明 本文中的NIFI是使用docker进行安装的&#xff0c;所有的配置参考&#xff1a;docker安装Apache NIFI 需求背景 现在有一个文件&#xff0c;里面存储的是一些json格式的数据&#xff0c;要求将文件中的数据存入数据库表中&#xff0c;以下是一些模拟的数据和对应的数据库…

centos7使用docker-compose一键搭建mysql高可用主从集群

docker部署 环境准备 卸载旧版本 yum remove -y docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-engine 安装依赖 yum install -y yum-utils \…

伪微分反馈控制(Pesudo-Drivative Feedback Control——PDF)

运动控制-单轴伺服控制带宽分析&#xff08;二&#xff09; - 知乎 (zhihu.com) 伪微分反馈控制_百度百科 (baidu.com) 伺服电机控制器的参数整定_老马过河hhh的博客-CSDN博客 伪微分PIIP控制_yukee10的博客-CSDN博客

Java8实战-总结23

Java8实战-总结23 使用流构建流由值创建流由数组创建流由文件生成流由函数生成流&#xff1a;创建无限流 小结 使用流 构建流 流对于表达数据处理查询是非常强大而有用的。到目前为止&#xff0c;已经能够使用stream方法从集合生成流了。此外&#xff0c;还介绍了如何根据数值…

docker搭建个人网盘和私有仓库Harbor

目录 1、使用mysql:5.7和 owncloud 镜像&#xff0c;构建一个个人网盘 2、安装搭建私有仓库 Harbor 1、使用mysql:5.7和owncloud&#xff0c;构建一个个人网盘 1.拉取mysql:5.6镜像&#xff0c;并且运行mysql容器 [rootnode8 ~]# docker pull mysql:5.7 [rootnode8 ~]# doc…

Excel VSTO开发10 -自定义任务面板

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 10 自定义任务面板 自定义任务面板&#xff08;有些地方称为侧边面板&#xff09;即CustomTaskPane&#xff0c;这个类在Microsoft…