当前位置: 首页 > news >正文

你不知道的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时,对于对象的变量,当前这个属性并不会被遍历到

相关文章:

你不知道的JavaScript---对象

1.语法 对象可以通过两种方式定义:一种是对象字面量形式,一种是构造形式 对象字面量: var muObject {key: value }构造形式的: var myObject new Object() myObject.key value不管是使用对象字面量形式还是构造形式创建出来…...

C++项目实战——基于多设计模式下的同步异步日志系统-①-项目介绍

文章目录 专栏导读项目介绍开发环境核心技术环境搭建日志系统介绍1.为什么需要日志系统2.日志系统技术实现2.1同步写日志2.2异步写日志 专栏导读 🌸作者简介:花想云 ,在读本科生一枚,C/C领域新星创作者,新星计划导师&a…...

解决Oracle数据库中日期格式不识别的问题

在数据库开发中,我们经常需要处理日期和时间数据。当我们在Oracle数据库中执行UPDATE语句时,可能会遇到ORA-01821错误,该错误表示提供的日期格式无法被数据库识别。本文将介绍如何解决Oracle数据库中日期格式不识别的问题。 问题分析&#x…...

一生一芯13——linux设置环境变量

参考自https://baijiahao.baidu.com/s?id1753516015142083750&wfrspider&forpc 本机使用ubuntu22.04 目录 1. 读取环境变量1. 读取特定环境变量2. 读取所有环境变量 2. 设置环境变量1. 对当前用户有效2. root设置 1. 读取环境变量 1. 读取特定环境变量 在命令行中输…...

CSS笔记(黑马程序员pink老师前端)定位

定位可以让盒子自由的在某个盒子内移动位置或者固定在屏幕中某个位置,并且可以压住其他盒子。 定位 定位模式 边偏移 定位模式说明static静态定位,按标准流特性摆放,没有边偏移,很少用relative相对定位,相对自身原有位置移动,原有位置继续占有(不脱标…...

C高级Linux指令和shell脚本

XMind...

449. 序列化和反序列化二叉搜索树

难度:中等 昨天忘记做了。。。 简单学习一下官方题解 主要是:’ .join(map(str, arr)) int数组转String,中间有空格隔开 list(map(int, data.split())) String转int数组 class Codec:def serialize(self, root: TreeNode) -> str:arr […...

DockerCompose部署es和kibana

DockerCompose文件 version: 3.1 services:elasticsearch:image: elasticsearch:7.13.3container_name: elasticsearchprivileged: trueports:- "9200:9200"- "9300:9300"environment:- ES_JAVA_OPTS-Xms128m -Xmx1024m #设置使用jvm内存大小- cluster.na…...

windows系统docker中将vue项目网站部署在nginx上

一、首先在windows系统上下载并安装docker,要下载windows版本 https://www.docker.com/products/docker-desktop/ PS:安装过程中需要WSL,我的是win11系统,直接提示了我安装就可以下一步了。其他windows系统版本我不知道是否需要单…...

LabVIEW利用纳米结构干电极控制神经肌肉活动

LabVIEW利用纳米结构干电极控制神经肌肉活动 随着人口老龄化,长期护理的必要性变得更加重要,医疗中心的压力开始达到惊人的水平。全球对所有社会和经济部门的认识对于更好地协调卫生和社会服务之间的护理以及为更多的院外治疗提供条件至关重要。 关于医…...

使用PHPStudy在本地快速建立网站并实现局域网外访问(无公网IP)

文章目录 使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点,测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中,查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2.2 映…...

Java工具类--http请求-post

支持各类型报文与参数说明 说明: url : 地址timeout:超时时间 如3秒 3*1000contentType:类型 如 application/x-www-form-urlencoded application/jsonapplication/xmlrequestBody:报文内容 如 application/x-www-form-urlenco…...

HTTP【总结】

1. 当用户在浏览器输入网址回车之后,网络协议都做了哪些工作? 首先解析出URL中的域名,根据域名获取对应的ip地址,从浏览器缓存中查看,如果没有则从本机域名解析文件hosts中查看,还没有则从DNS的层层解析。…...

统计子岛屿

统计子岛屿 关于岛屿的相似题目: 岛屿数量 – 二维矩阵的dfs算法封闭岛屿数量 – 二维矩阵的dfs算法统计封闭岛屿的数目统计子岛屿不同岛屿的数量 class CountSubIslands:"""floodFill 算法1254. 统计子岛屿https://leetcode.cn/problems/count-su…...

docker介绍、安装及卸载

官网安装教程:https://docs.docker.com/engine/install/centos/ ####### Docker介绍 ########## 镜像(image):Docker镜像就是一个只读的模板。镜像可以用来创建Docker容器,一个镜像可以创建很多容器。它也相当于是一…...

【EI/SCOPUS会议征稿】第二届环境遥感与地理信息技术国际学术会议(ERSGIT 2023)

第二届环境遥感与地理信息技术国际学术会议 2023 2nd International Conference on Environmental Remote Sensing and Geographic Information Technology 第二届环境遥感与地理信息技术国际学术会议(ERSGIT 2023)定于2023年11月10-12日在中国陕西西安…...

LabVIEW应用开发——LabVIEW2019保姆级介绍、安装、第一个程序

一、前言 LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而Lab…...

《TCP/IP网络编程》阅读笔记--Timewait状态和Nagle算法

1--Timewait状态 对于服务器端/客户端,当一端结束连接时,会向另一端发送 FIN 消息;两端的在经过四次挥手过程后,其 Socket 不会马上消除,而是会处于一个 Time-wait 状态的阶段,此时 Socket 拥有的端口号并没…...

Python常用IDE选择与安装

1、IDE简介 选择一款高效而又顺手的IDE学习或使用Python,可以让你的开发之路充满激情和动力,让你真正投入其中。 常见的Python的IDE工具有: PyCharm 由JetBrains开发的Python IDE,功能强大,支持调试、代码自动完成、…...

Docker从认识到实践再到底层原理(三)|Docker在Centos7环境下的安装和配置

前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版

1.题目描述 2.思路 当前的元素可以重复使用。 &#xff08;1&#xff09;确定回溯算法函数的参数和返回值&#xff08;一般是void类型&#xff09; &#xff08;2&#xff09;因为是用递归实现的&#xff0c;所以我们要确定终止条件 &#xff08;3&#xff09;单层搜索逻辑 二…...