返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JS ES5创建常量详解
  • 767
分享到

JS ES5创建常量详解

2024-04-02 19:04:59 767人浏览 安东尼
摘要

目录前言ES 5 创建常量Object.defineProperty 的基础用法创建常量常量居然可以修改值?兼容性前言 es6 刚推出的时候,let和const应该是大多数人学习ES

前言

es6 刚推出的时候,letconst应该是大多数人学习ES6的第一个知识点。

其中const可以用来定义 常量 ,将不需要改变的数据定义成一个常量。

但其实在ES6之前我们也是有办法定义常量的。

ES 5 创建常量

Object.defineProperty 的基础用法

ES6之前是没有const的,如果需要定义常量,可以使用Object.defineProperty

很多人知道Vue2使用 Object.defineProperty监听数据变化,但不一定知道 Object.defineProperty也可以用来定义常量。

Object.defineProperty方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。Object.defineProperty(obj, prop, descriptor)接收3个参数

  • obj: 要定义属性的对象。
  • prop: 要定义或修改的属性的名称或 Symbol
  • descriptor: 要定义或修改的属性描述符。

举个例子:

var LH = {}
Object.defineProperty(LH, 'name', {
  value: '雷猴'
})
console.log(LH) // 输出: {name: '雷猴'}
LH.name = '鲨鱼辣椒'
console.log(LH)  // 输出: {name: '雷猴'}

可以将上面的代码放到你的浏览器里试试。

为什么修改LH.name无效呢?因为descriptor除了value之外,还有其他属性,比如writable就可以用来定义该对象是否允许被修改,默认是false,也就是不能修改。

所以 LH.name = '鲨鱼辣椒'修改无效。

如果将writable改成true就可以修改了

var LH = {}
Object.defineProperty(LH, 'name', {
  value: '雷猴',
  writable: true // 允许修改
})
console.log(LH) // 输出: {name: '雷猴'}
LH.name = '鲨鱼辣椒'
console.log(LH)  // 输出: {name: '鲨鱼辣椒'}

创建常量

顺着上面的思路,如果我们把LH改成window,那是不是就可以在window上定义一个属性,而且该属性是全局的,定义后在什么地方都能调用。

Object.defineProperty(window, 'NAME', {
  value: '雷猴'
})
console.log(NAME) // 输出: 雷猴
NAME = '鲨鱼辣椒'
console.log(NAME) // 输出: 雷猴
window.NAME = '蟑螂恶霸'
console.log(NAME) // 输出: 雷猴

不管如何修改,NAME 都是最开始定义的值。

常量居然可以修改值?

上面创建的常量,value是一个基础数据类型的值。如果换成引用类型的值,那内容是可以修改的。

Object.defineProperty(window, 'NAME', {
  value: {
    nickname: '雷猴'
  }
})
console.log(NAME)
NAME.nickname = '鲨鱼辣椒'
console.log(NAME)

原因是,常量定的是定义时所指向的内存地址。

定义基础数据类型时,内存地址直接指向那个值。但定义引用类型时,内存地址存的是引用地址。所以常量的定义指的是引用地址不能修改

兼容性

使用 Object.defineProperty 定义常量时需要注意兼容性

到此这篇关于js ES5创建常量详解的文章就介绍到这了,更多相关JS ES5创建常量内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JS ES5创建常量详解

本文链接: https://lsjlt.com/news/153128.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JS ES5创建常量详解
    目录前言ES 5 创建常量Object.defineProperty 的基础用法创建常量常量居然可以修改值?兼容性前言 ES6 刚推出的时候,let和const应该是大多数人学习ES...
    99+
    2024-04-02
  • JavaScrip如何创建常量
    这篇文章主要介绍了JavaScrip如何创建常量,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。所谓常量即只能读取不能编辑(删除,修改)的变量...
    99+
    2024-04-02
  • 创建和获取 PHP 类常量
    本文将查看多个代码示例,这些示例将教你如何创建 PHP 类常量:const 关键字、访问修饰符和 final 关键字。你还将学习如何使用静态变量模拟常量。 在 PHP 中使用 const 关键字创...
    99+
    2024-02-27
  • linux命令行批量创建目录详解
    linux命令行批量创建目录详解 以前一直用-p创建目录链,觉得很方便了。 在空目录/opt/app/myapp里创建src,再创建main,再创建java mkdir -p /opt/app/myap...
    99+
    2022-06-04
    命令行 批量 详解
  • JS中如何利用字面量创建对象
    本篇内容介绍了“JS中如何利用字面量创建对象”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是字面量字面...
    99+
    2024-04-02
  • 详解Java创建线程的五种常见方式
    目录Java中如何创建线程呢?1.显示继承Thread,重写run来指定现成的执行代码。2.匿名内部类继承Thread,重写run来执行线程执行的代码。3.显示实现Runnable接...
    99+
    2024-04-02
  • Java常量池详解
    目录(1)class常量池(2)运行时常量池 (3)基本类型包装类常量池(4)字符串常量池总结java中有几种不同的常量池,以下的内容是对java中几种常量池的介绍,其中最常见的就是...
    99+
    2024-04-02
  • 详解_beginthreadex()创建线程
    目录一、使用_beginthreadex()             二、_beginthreadex()与代C...
    99+
    2024-04-02
  • docker容器的创建及常用操作命令详解
    目录docker容器简介1、创建容器2、查看本机的容器列表3、停止和启动一个容器4、删除容器5、查看容器内容6、复制命令7、进入容器docker容器简介 容器就是对外提供服务的一个实...
    99+
    2024-04-02
  • C++常量指针,指针常量,指向常量的常指针详解
    目录什么是指针内存地址指针所占内存const 变量指针常量,常量指针和指向常量的指针指针常量常量指针指向常量的常指针空指针、野指针总结什么是指针 指针就是指向变量在内存中的地址 数据...
    99+
    2024-04-02
  • 详解JS ES6变量的解构赋值
    目录1.什么是解构?2.数组解构3.数组模式和赋值模式统一4.解构的默认值5.对象的解构赋值6.函数参数7.字符串解构8.数值和布尔值的解构赋值9.解构赋值的应用1.交换变量的值2....
    99+
    2024-04-02
  • SpringBoot创建WebService方法详解
    目录1. 概述2. 实现步骤2.1 POM现加依赖2.2  定义接口 IWebService2.3 创建类 IWebServiceImpl 并实现接口 IWebServic...
    99+
    2023-05-19
    SpringBoot创建WebService SpringBoot WebService
  • 详解Rust中的变量与常量
    目录变量与可变性常量变量隐藏属性Rust 是一种低级静态类型多范式编程语言,专注于安全性和性能,解决了 C/C++ 长期以来一直在努力解决的问题,例如内存错误和构建并发程序。它具有以...
    99+
    2022-11-13
    Rust变量与常量 Rust变量
  • 详解JS中的对象字面量
    目录前言1. 在对象构造上设置原型1.1 __proto__用法的特殊情况2.简写方法定义3. super 的使用3.1 super 使用限制4.计算属性名4.1 symbol 作为...
    99+
    2024-04-02
  • js怎么创建一个具有可变数量的数组
    这篇文章主要介绍“js怎么创建一个具有可变数量的数组”,在日常操作中,相信很多人在js怎么创建一个具有可变数量的数组问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”js怎么创建...
    99+
    2024-04-02
  • java常量池图文详解
    java常量池是一个经久不衰的话题,也是面试官的最爱,题目花样百出,小菜早就对常量池有所耳闻,这次好好总结一下。推荐:java视频教程jvm虚拟内存分布:程序计数器是jvm执行程序的流水线,存放一些跳转指令,这个太高深,小菜不懂。本地方法栈...
    99+
    2016-07-05
    java
  • Python中集合的创建及常用函数的使用详解
    目录集合的创建无序性集合中的操作函数在集合中添加元素删除集合中的第一个元素删除集合中的指定元素判断元素是否在集合里面集合的遍历集合元素个数的计算集合与字典,列表,元组的嵌套集合与元组...
    99+
    2024-04-02
  • 详解如何创建Python元类
    目录什么是Python元类?Python中的类和对象Python中的动态类Python元类如何工作?类型类Python中的自定义元类Python中的__call__是什么?装饰器vs元类什么是Python元类? Py...
    99+
    2022-06-02
    python 元类
  • 详解Oracle创建表的参数
    详解Oracle创建表的参数   create table mytable (   id number(3),   n...
    99+
    2024-04-02
  • 详解Java反射创建对象
    一、什么是反射 Java Reflaction in Action中的解释:反射是运行中的程序检查自己和软件运行环境的能力,它可以根据它发现的进行改变。通俗的讲就是反射可以在运行时根...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作