首页 > 编程语言 >Javascript数据类型

Javascript数据类型

时间:2023-04-23 23:11:06浏览次数:45  
标签:String symbol Javascript 数据类型 key 类型 Symbol string

值类型和引用类型

原始类型(alias: 值类型,基础类型) primitive: string number boolean null undefined symbol
引用类型: Object 其他内置Object派送类型 Array Function Map Set WeakMap WeakSet RegExp
NaN: 特殊的 Number 类型,IsNaN() 判断一个值是否为 NaN

  • 引用类型可以有属性和方法,而基础类型是不可以的
    • 为什么 'text'.length 可以访问到 'text'length 属性?→ 包装类

包装类

String Number Boolean Symbol

new String('')String('') 的区别

  • new String('') 构造一个 String 实例, 得到的是一个对象; let a = new String('a'); let b = new String('b'), ab 是不相等的, a b 保存的是两个不同的引用地址
  • 直接调用 String 函数的话是会执行类型转换,这个函数返回的就是一个值类型的 string; String(1) 返回值是 '1'

'text'.length 能够工作的原因

通过 .(术语:属性访问器Property Accessor) 访问值类型 'text'length 属性时, 会发生类型转换(装箱),值类型的 'text' 会转换为引用类型的 String 实例(相当与 new String('text')), 然后这个 String 实例的 length 属性会被返回;

每次访问一个 string 值类型的属性时,都会 new 一个新的 String 包装类,返回这个包装类实例对应的属性值,返回后这个包装类的实例就会立即被丢弃

Number Boolean 同理, Symbol 比较特殊, new Symbol 会抛出 TypeError, 详见下文 → Symbol

值类型转换为引用类型(ToObject)的逻辑 → TC39 - sec-toobject

![[Pasted image 20230423221514.png]]

Symbol

Symbol 是一个比较特殊的包装类, 因为无法通过 new 操作符创建 Symbol 实例

通常直接通过 Symbol('bar') 函数创建值类型的 symbol

Symbol(key: string) 不论传入的参数 key 是什么,都会保证返回唯一的 symbol 值类型, 也就是通过 Symbol(key: string) 函数创建的每个 symbol 都是不相等的

let s = Symbol('foo');
let b = Symbol('foo');

console.log(s === b); // false

Symbol.for

Symbol.for(key: string) 可以保证返回相同的 symbol 类型, 如果传入的参数 key 已在全局 symbol 仓库中, 那么返回那个仓库中对应 keysymbol, 否则创建一个新的 symbol

Symbol.keyFor

Symbol.keyFor(s: symbol) 接受一个 symbol 作为参数,返回参数 s:symbolkey, s: symbol 必须是通过 Symbol.for(key: string) 创建在全局 symbol 仓库中的才行,否则会返回 undefined

let s = Symbol.for('foo');

console.log(Symbol.keyFor(s)); // 'foo'

Symbol的使用场景

用作对象属性的键值(key), 可以有效防止对象属性的键值冲突

参考资料

简书 - 【JS】string和String差异详解,基本类型和包装类学习
MDN - Symbol

标签:String,symbol,Javascript,数据类型,key,类型,Symbol,string
From: https://www.cnblogs.com/laggage/p/17348073.html

相关文章

  • 实验3 控制语句与组合数据类型应用编程
    task1问题1:可以取到100问题2:范围:0、1、2、3、4,不能取到5;范围:1、2、3、4,不能取到5问题3:一定是5问题4:一定是5task2-3book_infos=[{'书名':'昨日的世界','作者':'斯蒂芬.茨威格'},{'书名':'局外人','作者':'阿尔贝.加缪'......
  • 实验3 控制语句与组合数据类型应用编程
    task1源代码1importrandom23print('用列表存储随机整数:')4lst=[random.randint(0,100)foriinrange(5)]5print(lst)67print('\n用集合存储随机整数:')8s1={random.randint(0,100)foriinrange(5)}9print(s1)1011print('......
  • JavaScript 使用 splice 方法删除数组元素可能导致的问题
    JavaScript使用splice方法删除数组元素可能导致的问题splice()方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。JavaScript遍历数组并通过splice方法删除该数组符合某些条件的元素将会导致哪些问题?导致......
  • JavaScript分页控件 js 分页
    <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv="Content......
  • 实验三 控制语句与组合数据类型应用编程
    task1源代码1importrandom23print('用列表存储随机整数:')4lst=[random.randint(0,100)foriinrange(5)]5print(lst)67print('\n用集合存储随机整数:')8s1={random.randint(0,100)foriinrange(5)}9print(s1)1011print('......
  • JavaScript的swichcase方法
    functionchangeBody(index){switch(index){case1:{document.getElementById('bull').style.display="";document.getElementById('cont').style.display="none";document.getElementById('gridPager'......
  • JavaScript的类型转换(字符转数字,数字转字符)
    在Java中,基本类型之间的强制转换也不是这样的,比如,整数要转换成字符串,必须使用Integer.toString()静态方法或者String.valueOf()静态方法,把字符串转换为整数,必须使用Integer.valueOf()。可见,不能把JavaScript中的类型转换看作为“强制类型转换”。在JavaSc......
  • Vue 项目安全扫描漏洞,JS 库版本太低,要求升级 YUI(vue2 升级javascript库)【检测到目标站
    原帖:https://blog.csdn.net/u012961419/article/details/130016341背景公司信安部门对项目进行安全扫描,查出一些漏洞,其中有一项要求升级javascript框架库(如图): 吓得我以为让我把Vue2升级成Vue3。经过一番询问后才知道,是工具包中依赖的YUI是存在安全漏洞的版本。漏洞定......
  • JavaScript实现文件上传下载功能实例解析
    ​ 需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制。 第一步:前端修改由于项目使用的是BJUI前端框架,并没有使用框架本身的文件上传控件,而使用的基于jQuery的Uploadify......
  • 实验3 控制语句与组合数据类型应用编程
    实验任务一:实验源码:importrandomprint('用列表存储随机整数:')lst=[random.randint(0,100)foriinrange(5)]print(lst)print('\n用集合存储随机整数:')s1={random.randint(0,100)foriinrange(5)}print(s1)print('\n用集合存储随机整数:')s2=set()......