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

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.7K30
  • 浅析 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.8K53

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

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

    83530

    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代码其他对象纯净性

    35620

    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

    JS深浅复制

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

    4.1K20

    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...允许读取位于连接对象链深处属性不必明确验证链中每个引用都是否有效。?.

    26110

    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

    39531

    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

    12710

    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() 返回一个包含该对象所有的可枚举数组。...) 将一个对象中可枚举属性键名和键值按照二维数组方式返回。...一个类主体中可以有任意数量静态 {} 初始化块,它们将与任何交错静态字段初始设定项一起按照声明顺序执行,我们可以在静态块中使用超属性来访问超类属性

    2K20

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

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

    1.9K32

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

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

    54140

    前端面试题---JS部分

    什么是深拷贝,浅拷贝,浅拷贝 赋值区别,如何实现 深拷贝和浅拷贝是针对复杂数据类型来说,浅拷贝拷贝一层,深拷贝是层层拷贝。...1.浅拷贝: 将原对象或原数组引用直接赋给新对象,新数组,新对象只是对原对象一个引用,不复制对象本身,新旧对象还是共享同一块内存 如果属性一个基本数据类型,拷贝就是基本类型,如果属性是引用类型...,用来存新对象,并且修改新对象不会影响原对象 3、赋值: 当我们把一个对象赋值一个变量时,赋是该对象在栈中内存地址,不是堆中数据。...作用:能进行部分传传统函数调用则需要预先确定所有实参。如果你在代码某一处获取了部分实参,然后在另一处确定另一部分实参,这个时候柯里化和偏应用就能派上用场。...数组元素是按次序排列,变量取值由它位置决定; 而对象属性没有次序,变量必须与属性同名,才能取到正确。字符串也是可以解构赋值。字符串被转换成了一个类似数组对象.

    75720
    领券