首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JS - Object属性不接受赋值,而只获取数组的最后一个值

JS中的Object属性不接受赋值,而只获取数组的最后一个值是因为对象的属性是通过键值对的形式存储的,而不是通过索引访问的。对象的属性是无序的,每个属性都有一个唯一的键,通过键可以获取对应的值。而数组是有序的,每个元素都有一个索引,通过索引可以获取对应的值。

如果想要获取数组的最后一个值,可以使用数组的length属性来获取数组的长度,然后通过索引获取最后一个值。例如:

代码语言:txt
复制
var arr = [1, 2, 3, 4, 5];
var lastValue = arr[arr.length - 1];
console.log(lastValue); // 输出:5

在这个例子中,arr.length - 1表示数组的最后一个索引,通过arr[arr.length - 1]可以获取到最后一个值。

需要注意的是,对象的属性是不可变的,即不能直接给对象的属性赋值。如果想要修改对象的属性值,可以通过重新赋值一个新的对象来实现。例如:

代码语言:txt
复制
var obj = {name: 'John', age: 20};
obj = {name: 'Alice', age: 25};
console.log(obj); // 输出:{name: 'Alice', age: 25}

在这个例子中,通过重新赋值一个新的对象来修改obj的属性值。

总结起来,对象的属性是通过键值对存储的,不能直接赋值,而数组是通过索引访问的,可以通过索引获取数组的最后一个值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JS数组at函数(获取最后一个元素的方法)介绍

本文介绍js中数组的at函数,属于比较简单的知识普及性文章,难度不大。 0x00 首先,我们可以思考如下一个问题,如果要获取一个数组的最后一个元素(这是很常用的操作),我们应该怎么做?...相信大部分人能够想到的代码是这样的: let last = array[ array.length - 1]; 嗯,这是最常用的获取数组最后一个元素的方式,依此类推获取倒数第二个,第三个的方式类似。...当然除了这种方式之外,还有其他的方式,比如: let last = array.slice(-1)[0] 先通过slice获取后面一个元素的数组,然后通过下标0获取最后一个元素。...这就让人羡慕python里面的数组操作,可以通过负索引的方式获取最后一个元素,代码如下: last = array[-1] js里面不支持负索引的方式。...不过es6新增了一个at方法,可以获取数组的指定索引的元素,并且支持负索引。负索引从后往前计算,-1表示最后一个,-2 表示倒数第二个,依此类推。 因此试用此方法获取最后一个元素会变得简单很多。

4.8K30
  • 浅析 Map 和 WeakMap 区别以及使用场景

    ,我们创建了一个对象并将一个节点对象作为了它的键名,并进行了代码测试,首先验证了获取到的element节点为一个对象,再确定了经过toString方法转化后的结果,以这个值为键名成功的输出了value值...揭开面目 console.log(dataMap); 从上面的代码中,我们可以清楚的看到,第8行代码获取值时直接传入了element对象, 可以成功的获取到对应的值,在最后打印dataMap时更是验证了上诉说法...Map 的键值对个数可以轻易通过size属性获取,Object 需要手动计算。 Map 在频繁增删键值对的场景下性能要比 Object 好。 4....WeakMap 只能将对象作为键名 只接受对象作为键名(null 除外),不接受其他类型的值作为键名 null 除外 正常添加 2....已经有了一定的答案 七、Map 和 WeakMap 的区别 看到这里相信心中已经有答案了 Map 的键可以是任意类型,WeakMap 只接受对象作为键(null除外),不接受其他类型的值作为键

    2.9K64

    后端眼中的JavaScript长啥样?这篇文章告诉你。

    所以在这还有一个更简单的写法:使用数组的长度来控制遍历的次数。如果数组的长度是5,索引的最后一个就是4,我们发现最大索引总是比长度少 。...12.3.4.2、变量预解析 变量预解析也叫变量的提升,变量的声明会被提升到当前作用域的最上面,变量的赋值不会提升,变量提升只提升声明,不提升赋值。...,而当数据量庞大时,不可能做到记忆所有数据的索引值。...: Object() :第一个字母大写 new Object() :需要 new 关键字 使用的格式:对象.属性 = 值; 12.3.3、利用构造函数创建对象 构造函数:是一种特殊的函数,主要用来初始化对象...相同,但是不接受负数的值。

    83730

    ES6一些不常见的小知识

    WeakMap是key / value的组合,key只接受对象,不接受基本类型,value可以为任意类型。...WeakSet不可遍历 Set存在一个数组存放value的值,引用原对象,故可遍历 WeakSet不存这样的数组,故不可遍历 const name = "LeBron"; const age = 21;...例如delete、赋值、判断等 命令式操作失败一般会报错,而Reflect不会,返回一个Boolean值判断是否成功。...元编程即对编程语言进行编程 例如Proxy对象可以进行代理,拦截get、set操作 而在程序中获取的是你编程后的值。...反射的对象不仅针对于Object,还可能针对函数 例如apply,调用Object.apply(myFunc)还是挺奇怪的 用一个单一的对象保存内置方法能够保证JavaScript代码其他对象的纯净性

    35820

    ECMAScript 6 新特性总结

    使用时需注意: 对常量重新赋值不会报错,只会默默地失败。 与let命令相同,只在声明所在的块级作用域内有效。...本质上,解构写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。 对数组的结构赋值,允许指定默认值。...方法,以及Object.getOwnPropertyKeys方法获取相应的Symbol属性名。...+数组形式相当于互逆操作: ...变量名:将多余的参数放入一个数组中,rest参数必须在最后一个;函数的length属性,不包括rest参数。...同样与WeakSet类似,WeakMap结构与Map结构基本类似,唯一的区别是它只接受对象作为键名(null除外),不接受原始类型的值作为键名,而且键名所指向的对象,不计入垃圾回收机制,有助于防止内存泄漏

    1.5K60

    2022高频前端面试题合集之JavaScript篇(中)

    函数防抖(debounce),指的是短时间内多次触发同一事件,只执行最后一次,或者只执行最开始的一次,中间的不执行。...,类似集合 可以遍历,方法很多,可以跟各种数据格式转换 「WeakMap」 只接受对象作为健名(null 除外),不接受其他类型的值作为健名 键名是弱引用,键值可以是任意的,键名所指向的对象可以被垃圾机制回收...参考答案: defer 属性 async 属性 使用 jQuery 的 getScript( ) 方法 使用 setTimeout 延迟方法 把 JS 外部引入的文件放到页面底部,来让 JS 最后引入...当拷贝的 object 只有一层的时候,是深拷贝,但是当拷贝的对象属性值又是一个引用时,换句话说有多层时,就是一个浅拷贝。 ES6 扩展运算符,当 object 只有一层的时候,也是深拷贝。...,而 Proxy 可以直接监听对象而非属性; Object.defineProperty 无法监控到数组下标的变化,而 Proxy 可以直接监听数组的变化; Proxy 有多达 13 种拦截方法; Proxy

    2.3K10

    ES7、ES8、ES9、ES10、ES11、ES12新特性大全!

    2.1 返回值 Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组 2.2 语法 Object.entries(obj); 2.3 例子 let obj = {a: 1,...b: 2}; Object.entries(obj); // [['a', 1], ['b', 2]] 三、Object.values 3.1 返回值 Object.values()方法返回一个给定对象自身可枚举属性值的数组...Object.getOwnPropertyDescriptors 4.1 返回值 Object.getOwnPropertyDescriptors() 方法用来获取一个对象的所有自身属性的描述符 4.2...,并且在上一行已经使用了尾后逗号,你可以仅仅添加新的一行,而不需要修改上一行 5.2 注意 JSON 不允许尾后逗号 5.3 举例 字面量中的尾后逗号 a: 1,b: 2} - 数组 ```js let...允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用都是否有效。?.

    28510

    JS深浅复制

    ()通过「赋值的方式」来处理副本中对应属性 赋值操作调用自己或者继承的setter函数,而定义属性不是 __proto__是由Object类通过一个getter和一个setter实现的 '__proto...浅复制(Shallow Copying): 仅仅复制对象或数组类型的顶层变量,而变量的值和原数据的值是同一份 深复制(Deep Copying):复制原数据的所有条目(key-value),它遍历完整的数据树...在开始讲述之前,我们先做一个简单的总结: 不足&特性 扩展运算符不能复制普通对象的prototype属性 扩展运算符不能复制内置对象的「特殊属性」(internal slots) 扩展运算符只复制对象的本身的属性...扩展运算符在副本中「直接定义新的属性」 Object.assign()通过「赋值的方式」来处理副本中对应属性 ❝赋值操作调用自己或者继承的setter函数,而定义属性不是。...'object'判断值的类型,如果是对象,递归处理 而上述代码,只能说是深复制的一个基础版本,其中还存在一些漏洞。

    4.1K20

    ES6知识点补充

    ,titleTwo(如果没有找到会返回undefined) 数组解构的原理其实是消耗数组的迭代器,把生成对象的value属性的值赋值给对应的变量 数组解构的一个用途是交换变量,避免以前要声明一个临时变量值存储值...扩展运算符 只要含有iterator接口的数据结构都可以使用扩展运算符 扩展运算符可以和数组的解构赋值一起使用,但是必须放在最后一个,因为剩余/扩展运算符的原理其实是利用了数组的迭代器,它会消耗3个点后面的数组的所有迭代器...遍历获取的是对象的键值,for ... in 获取的是对象的键名 for ... in会遍历对象的整个原型链,性能非常差不推荐使用,而for ... of只遍历当前对象不会遍历原型链 对于数组的遍历,for...... in会返回数组中所有可枚举的属性(包括原型链),for ... of只返回数组的下标对于的属性值 for ... of循环的原理其实也是利用了遍历对象内部的iterator接口,将for .....20,而x是通过export {}导出的,它导出的是一个变量的引用,即a.js导入的是当前x的值,只关心当前x变量的值是什么,可以理解为一个"活链接" export default这种导出的语法其实只是指定了一个命名导出

    1.1K50

    ECMAScript6 基础知识点(上)

    内置对象和函数的标准库(JSON,Math,数组方法,对象内省的方法等等)let 关键字关键字 let 的特点有:① 只在 let 命令所在的代码块内有效;② 不会产生变量提升现象;③ 同一个块级作用域...;③ 不存在变量提升,必须先声明后使用;④ 不可重复声明同一个变量;⑤ 声明后必须要赋值若是使用 const 来声明一个对象类型的常量,可以修改或增加该对象属性的值,这是因为,在赋值过程中,变量实际上存储的是数据的地址...() 函数,将源对象的属性赋值到目标对象上let target = { "a": 1 }let origin = { "b": 2, "c": 3 }Object.assign(target, origin...) // {a: 1, b: 2, c: 3}Object.getPrototypeOf() 函数,获取一个对象的 prototype 属性function Person(){}Person.prototype......values 所获取到,表示法:...values(三个点+变量名);其次,values 是一个数组,需要注意的是,rest 参数必须是函数的最后一个参数,后面不能再跟其他参数function

    40431

    ES6的语法

    const FOO=Object.freeze({a:1,b:2}) 冻结对象本身不能添加属性,不能修改属性的值类型 冻结数组本身不能添加元素,不能修改元素的值类型 //Object.keys(...Object.keys():返回数组,包含对象自身所有可枚举属性的键名 JSON.stringify():只串行化对象自身的可枚举属性 Object.assign():忽略enumerable为...false的属性,只拷贝对象自身的可枚举属性 Object.assign({},obj,变量1,变量2)合并对象,浅拷贝,返回新数组 Object.assign(obj,变量1,变量2)合并对象,浅拷贝...obj,mn)设置对象的原型对象 Object.getPrototypeOf(obj)获取对象的原型对象 扩展运算符...的解构赋值 将对象可遍历但没分配的属性拷贝过来 let{a,b...c}={a:...,表示独一无二的值 let s=Symbol()没有new ,不是对象,类似字符串 let s=Symbol("js")参数只是个描述,用于不同Symbol之间的区分,获取这个参数的描述:s.description

    14010

    2019前端面试基础题集合!赶紧上车!快!快!快!

    返回值: 返回包排序后的新数组。 pop() 删除一个数组中的最后的一个元素 语法:arrayObject.pop() 参数:无 返回值: 返回被删除的元素。...2.end(可选):索引数值(不包括),接受负值,在该索引处前结束提取原数组元素,默认值为数组末尾(包括最后一个元素)。...返回值: 方法返回指定元素,在数组中的最后一个的索引,如果不存在则返回 -1。...//vue实现数据双向绑定的原理就是用Object.defineproperty()重新定义(set方法)对象设置属性值和(get方法)获取属性值的操纵来实现的。...而get和set属于存取描述符对象的属性。 //这个方法会直接在一个对象上定义一个新属性或者修改对象上的现有属性,并返回该对象。 <!

    1.9K32

    2022高频前端面试题合集之JavaScript篇(上)

    最后总结一下两者的区别: 访问方式 原始值:访问到的是值 引用值:访问到的是引用地址 比较方式 原始值:比较的是值 引用值:比较的是地址 动态属性 原始值:无法添加动态属性 引用值:可以添加动态属性 变量赋值...最后总结一下两者的区别: 访问方式 原始值:访问到的是值 引用值:访问到的是引用地址 比较方式 原始值:比较的是值 引用值:比较的是地址 动态属性 原始值:无法添加动态属性 引用值:可以添加动态属性...函数防抖(debounce),指的是短时间内多次触发同一事件,只执行最后一次,或者只执行最开始的一次,中间的不执行。 函数节流(throttle),指连续触发事件但是在 n 秒中只执行一次函数。...浅拷贝就是只拷贝对象的引用,而不深层次的拷贝对象的值,多个对象指向堆内存中的同一对象,任何一个修改都会使得所有对象的值修改,因为它们共用一条数据。...工作流程: 声明了一个变量并将一个引用类型的值赋值给这个变量,这个引用类型值的引用次数就是 1; 同一个值又被赋值给另一个变量,这个引用类型值的引用次数加1; 当包含这个引用类型值的变量又被赋值成另一个值了

    1.1K20

    一文吃透es6 ~ es13所有新特性

    而js使用了ES的标准,并且在其基础之上实现了其他的功能。...let和const声明变量 箭头函数 解构赋值 参数默认值 模板字符串 数组方法for of Module模块化 数组的(展开/剩余)运算符 class类 Promise Map和Set对象 symbol...,完全避免了回调地狱层层嵌套的可能 实用程度:★★★★★ Object.values() 返回一个包含该对象所有的可枚举值的数组。...) 将一个对象中可枚举属性的键名和键值按照二维数组的方式返回。...一个类的类主体中可以有任意数量的静态 {} 初始化块,它们将与任何交错的静态字段初始值设定项一起按照声明的顺序执行,我们可以在静态块中使用超属性来访问超类的属性。

    2.1K20

    20道精选的面试题附答案,进来看看能答对多少(二)

    obj.name是给person这个对象赋值; 2. obj = new Object(),把obj指向另一个对象, 3. obj.name现在是给这个新对象赋值,不影响person这个变量指向的对象...先执行有参数列表,再执行点的优先级,最后再函数调用 fn作为构造函数有返回值,在JS中构造函数的返回值可有可无 没有返回值:返回实例化的对象 有返回值:检查其返回值是否为引用类型 非引用类型:基本类型则与无返回值相同...,再计算表达式2的值,……一直计算到表达式n的值,最后整个逗号运算符的返回值是最后一个表达式的值。...解析 : 逗号操作符会从左到右计算它的操作数,返回最后一个操作数的值。...而使用defineProperty给对象添加属性之后,属性默认为不可枚举, Object.keys方法仅返回对象中可枚举的属性,因此只打印name 15、写出执行结果,并解释原因 let num

    54740
    领券