首页 > 其他分享 >Object.assign(), 一道关于基本类型合并的面试题

Object.assign(), 一道关于基本类型合并的面试题

时间:2024-11-06 16:46:25浏览次数:1  
标签:面试题 对象 s1 Object var assign 属性

var s1 = "abc";
var s2 = true;
var s3 = 10;
var s4 = Symbol("foo")
var obj = Object.assign( s1, null, s2, undefined, s3, s4);
console.log(obj); // { "0": "a", "1": "b", "2": "c" },怎么运行成这样的结果呢

以上题目,为何运行成最后的结果呢????

在你提供的代码中,Object.assign() 的行为可能让你感到困惑。首先,让我们逐步分析一下:

代码分析:

var s1 = "abc";
var s2 = true;
var s3 = 10;
var s4 = Symbol("foo");
var obj = Object.assign(s1, null, s2, undefined, s3, s4);
console.log(obj); // { "0": "a", "1": "b", "2": "c" }
  1. Object.assign() 方法
    Object.assign(target, ...sources) 会把所有源对象(sources)的可枚举属性复制到目标对象(target)上。特别注意,如果源是基本数据类型(如字符串、数字等),会将其转换为对象类型,并复制属性。

  2. 分析参数

    • s1 = "abc":字符串会被转换为一个类数组对象,它的每个字符成为一个属性,因此 'a', 'b', 'c' 分别成为 012 属性。即 s1 变成了 {"0": "a", "1": "b", "2": "c"}
    • nullundefined 是空值,它们不会对目标对象进行任何改变,因为它们没有属性。
    • s2 = true:布尔值 true 会被转换成 Boolean 对象(new Boolean(true)),但该对象没有可枚举的自定义属性,基本上不会对目标对象产生影响。
    • s3 = 10:数字 10 会被转换成 Number 对象(new Number(10)),同样它不会影响目标对象,因为 Number 对象没有可枚举属性。
    • s4 = Symbol("foo")Symbol 是一种原始值,它不会对目标对象产生影响,因为 Symbol 本身是不可枚举的。

重要的转化:

  • 字符串 s1 = "abc" 会被视为类数组对象,"a""b""c" 分别变成了属性名 012,并且这些属性会被复制到目标对象。
  • nullundefinedtrue10、以及 SymbolObject.assign() 中没有可枚举的属性,因此它们对 obj 没有影响。

最终结果:

由于 Object.assign() 是将源对象的属性复制到目标对象上,最后得到的 obj 其实就是 s1 的类数组属性("0": "a", "1": "b", "2": "c")。

{ "0": "a", "1": "b", "2": "c" }

关键点:

  1. 字符串 s1 转为类数组s1 被视为类数组对象,其字符分别成为了数组的索引。
  2. nullundefined 不产生影响:它们没有可枚举属性。
  3. 其他基本类型如 true10Symbol 不影响目标对象

所以,最终 Object.assign() 操作的结果是从 s1 (即字符串 "abc")复制的类数组属性。

标签:面试题,对象,s1,Object,var,assign,属性
From: https://www.cnblogs.com/pansidong/p/18530552

相关文章

  • 浏览器是如何渲染页面的? - 2024最新版前端秋招面试短期突击面试题
    浏览器是如何渲染页面的?-2024最新版前端秋招面试短期突击面试题【100道】......
  • [Javascript] Iterate over Object
    const[a,b]={a:3,b:4,};console.log(a,b);//TypeError:{(intermediatevalue)(intermediatevalue)}isnotiterable Howtomakeitworkwithouttouchoriginalcode?Weneedtouse[Symbol.iterator]forObject.prototype;Object.prototype[Sym......
  • 150道MySQL高频面试题,学完吊打面试官--InnoDB索引与MyISAM索引实现的区别+一个表中如
    前言本专栏为150道MySQL大厂高频面试题讲解分析,这些面试题都是通过MySQL8.0官方文档和阿里巴巴官方手册还有一些大厂面试官提供的资料。MySQL应用广泛,在多个开发语言中都处于重要地位,所以最好都要掌握MySQL的精华面试题,这也是面试官最喜欢问的,现在面试官在面试的时候更关......
  • 宁德时代Java面试题及参考答案
    MySQL的底层实现机制是怎样的?MySQL主要包括以下几个核心的底层实现部分。存储引擎层是MySQL的关键。InnoDB是最常用的存储引擎,它以页为单位进行存储,默认页大小是16KB。数据存储在表空间中,表空间可以由多个文件组成。InnoDB采用了B+树的数据结构来存储索引和数据......
  • 基于Arcgis10.8+VS2019的ArcObjectsSDKNet安装
    基于Arcgis10.8+VS2019的ArcObjectsSDKNet安装首先Arcgis10.8和Arcgis10.8.1所需要的ArcObjectsSDKNet版本是不同的在使用10.8的ArcObjectsSDKNet在Arcgis10.8.1的基础上是安装不了的,会检测不到在安装Arcgis10.8的基础上,下载Arcgis10.8的ArcObjectsSDKNet,解压后进行安装连接......
  • 使用 axios 拦截器实现请求和响应的统一处理(附常见面试题)
    在现代前端开发中,我们经常需要向服务器发送HTTP请求,并根据响应内容做不同的处理。axios是一个流行的HTTP库,提供了拦截器功能,可以在请求和响应阶段插入自定义逻辑,这使得我们在处理认证、错误提示等场景时更为简洁、统一。本文将讲解如何利用axios的请求拦截器和响应拦......
  • Java面试题中高级进阶(JVM篇)
    前言本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!什么是StopTheWorld?什么是OopMap?说一下JVM的主要组成部分及其作用?什么是指针碰撞?什么是空闲列表?什么是TLAB?似乎有点模糊了,那就大概看一下面试题吧。好记性不如烂键盘***12万字的java面试题整理***什么是StopT......
  • 拼多多2025秋招多模态大模型搜广推面试题
    本文涵盖了几道经典的面试题,包括二叉搜索树的构建与打印、逻辑回归分类算法及其核心概念,以及L1和L2正则化的原理。帮助大家在面试中更好地应对算法和机器学习基础知识的考察。数据结构面试题:使用Python构建二叉搜索树(BST)题目描述给定一个无序数组,将数组按顺序插入......
  • 代码随想录第四天|链表part02--24. 两两交换链表中的节点、19.删除链表的倒数第N个节
    资源引用:leetcode题目:24.两两交换链表中的节点(24.两两交换链表中的节点-力扣(LeetCode))19.删除链表的倒数第N个结点(19.删除链表的倒数第N个结点-力扣(LeetCode))面试题02.07.链表相交(面试题02.07.链表相交-力扣(LeetCode))142.环形链表Ⅱ(142.环形链表II-力扣(Leet......
  • Java面试系列-Java并发面试题20道,结合手撕Java系列学习效果更佳,知识点更深入
    文章目录1.什么是线程安全?2.解释下Java中的Thread类和Runnable接口的区别。3.Java中的synchronized关键字有哪些特性?4.volatile关键字的作用及限制是什么?5.解释Java内存模型(JMM)。6.Java中如何实现线程间通信?7.AQS(AbstractQueuedSynchronizer)的工作原理是什么?8.......