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

一文读懂《Effective Java》第43条:返回零长度数组或集合,不是null

对于一个返回null 不是长度数组或者集合方法,客户端几乎每次用到该方法都可能会忘记写专门处理null 返回值代码,进而导致NPE。...返回值为null 与性能 有时候会有程序员认为:null 返回值比零长度数组更好,因为它避免了分配数组所需要开销,但这种观点站不住脚。...在返回值这种级别上担心性能问题是不明智,除非分析表明这个方法是造成性能问题真正源头 对于不返回任何元素调用,每次返回同一个零长度数组是有可能,因为零长度数组不可变不可变对象可能被自由共享...,没理由返回null,二是返回一个零长度数组或者集合。...Java 返回值为null 做法,很可能是从C 语言沿袭过来,在C 中,数组长度是与实际数组分开返回,如果返回数组长度为0,再分配一个数组就没有任何好处了。

1.6K20

JavaScript 10分钟入门

变量,数组,函数参数和返回值都可以不声明,它们通常不会被JavaScript引擎检查,会被自动进行类型转换。...==)不是==和!=。否则,数字2是等于字符串“2”, (2 == “2″) is true VAR= [] 和var a = new Array() 都可以定义一个空数组。...正常数组 可以用一个JavaScript数组文本进行初始化变量: var a = [1,2,3]; 因为它们是数组列表,JS数组可动态增长:我们可以使用比数组长度更大索引。...例如,上面的数组变量初始化后,数组长度为3,但我们仍然可以操作第5个元素 a[4] = 7; 我们可以通过数组length属性得到数组长度: for (i=0; i < a.length; i++)...Maps map(也称为“散列映射”或“关联数组’)提供了从及其相关值映射。

1.3K100
您找到你想要的搜索结果了吗?
是的
没有找到

Javscript数组快速填充数据8种方

,并返回它,不会改变原数组长度。...', 'd', 'e']; console.log(arr.copyWithin(0, 3, 4)); [ "d", "b", "c", "d", "e" ] keys() keys() 方法用于从数组创建一个包含数组可迭代对象...,不考虑参数数量或类型 const arr = Array.of(1, 2, 3); // [1, 2, 3] Array.of() 和 Array 构造函数之间区别在于处理整数参数:Array.of...(7) 创建一个具有单个元素 7 数组 Array(7) 创建一个长度为7数组(注意:这是指一个有7个空位(empty)数组不是由7个undefined组成数组)。...() Object.keys() 方法会返回一个由一个给定对象自身可枚举属性组成数组数组中属性名排列顺序和正常循环遍历该对象时返回顺序一致 。

74320

原生JS | 当兔子遇到鸡

鸡兔同笼功能基本实现 鸡兔计算核心公式 兔子数量 = 脚数 / 2 - 头数; 鸡数量 = 头数 - 兔子数量。...所以该方法也是不可行。 码匠好友:进行长度检测? 码匠:length属性可用于数组,但不能用于对象。 码匠好友:使用for-in循环进行枚举总可以了吧!...类似方法:使用Object.keys(obj); Object.keys(obj); 该方法类似于枚举,但是,是直接调用Objectkeys方法,方法返回值为 —— 所有可枚举属性字符串数组。...由于该方法返回值为一个数组,因此可以通过length属性,进行判断,如果length长度为0,则代表该对象为空。...NaN基本检测 当用户在input中输入非数字或不合法数字时,会通过上面的Number方法转换为NaN。 当出现NaN时,则需要给用户给予反馈,不是继续进行运算,因此需要进行NaN进行检测。

2K100

如果再写 for 循环,我就锤自己!

i = 0, keys=Object.keys(profile); i < keys.length;i++){ console.log(keys[i]) // 对象键值 console.log...(profile[keys[i]]) // 对象对应值 } // 遍历字符串 let str = "abcdef"; for(let i = 0;i < str.length ;i++){...ES5版本发布,我可以创建一个新数组,新数组结果是原数组每个元素都调用一次提供函数后返回值。...定义一个变量i(数字类型,表示数组下标),按照一定条件,对i进行循环累加。条件通常为循环对象长度,当超过长度就停止循环。因为对象无法判断长度,所以搭配Object.keys()使用。...返回值是undefine。 map ES5 提出。给原数组每个元素都按顺序调用一次 callback 函数。生成一个新数组,不修改调用它数组本身。返回值是新数组

45750

for 循环 5 种写法,哪种最快?

i = 0, keys=Object.keys(profile); i < keys.length;i++){ console.log(keys[i]) // 对象键值 console.log...(profile[keys[i]]) // 对象对应值 } // 遍历字符串 let str = "abcdef"; for(let i = 0;i < str.length ;i++){...ES5版本发布,我可以创建一个新数组,新数组结果是原数组每个元素都调用一次提供函数后返回值。...定义一个变量i(数字类型,表示数组下标),按照一定条件,对i进行循环累加。条件通常为循环对象长度,当超过长度就停止循环。因为对象无法判断长度,所以搭配Object.keys()使用。...返回值是undefine。 map ES5 提出。给原数组每个元素都按顺序调用一次 callback 函数。生成一个新数组,不修改调用它数组本身。返回值是新数组

89520

jses6判断对象是否为空,并判断对象是否包含某个属性

大家好,又见面了,我是你们朋友全栈君。 js判断对象为空已经有好几种方法了,但是个人觉得不是特别方便。...(不含继承)所有可遍历属性键值 (3)、Object.entries:返回一个数组,成员是参数对象自身(不含继承)所有可遍历属性键值对 由此,我们可以通过其中任意一个方法,得到返回数组,判断数组长度是否大于...Object.values(obj)); // ["bar", 42] console.log(Object.entries(obj)); // [["foo", "bar"], ["baz", 42]] // 打印返回值长度...// 打印空对象长度 console.log(Object.keys(obj2).length); // 0 这样我们就可以很简单直观判断出对象是否为空,并且可以通过这三个方法,拿到想要数据(键名...、键值、键值对) 那么既然得到了返回值数组,我们也可以很简单判断对象中是否包含某个我们已知属性名 console.log(Object.keys(obj).indexOf('baz')); // 1

2.3K40

React中浅比较是如何工作

keysB = Object.keys(objB); if (keysA.length !...这个代码使用了Flow作为类型检测系统不是使用TypeScript。两个函数参数都使用了Flow中mixed类型(类似TypeScript中unknnown)。这表明它们可以是任意类型。...因此可以把重点放在复杂数据结构比较上 首先,我们可以简单比较它们数量是否相等。如果不是,他们就不会浅比较相等,这可以提高检查效率。我们使用Object.keys获取它们数量。...对于对象,数组由实际组成;而对于数组数组将由数组索引组成。 import hasOwnProperty from '....如{0:2,1:3}等于[2,3] 由于使用Object.is不是使用===。+0和-0在浅比较中是不相等。并且NaN和NaN也认为不相等。

2.9K10

JavaScript array对象

如果传递是一或多个数组,则该方法会将这些数组每一项都添加到结果数组中 如果传递值是不是数组,这些值会被简单添加到数组末尾 注意:该方法不会改变先后数组仅仅会返回被连接数组一个副本。...如果要进行 concat() 操作参数是数组,那么添加数组元素,不是数组。...push() 方法可把它参数顺序添加到 arrayObject 尾部。它直接修改 arrayObject,不是创建一个新数组。...该方法会改变原来数组不会创建新数组。 语法:arrayObject.reverse() 返回值 颠倒后数组。 reverse() 方法将数组中元素位置颠倒,并返回该数组。...如果 deleteCount 被省略了,或者它值大于等于array.length - start(也就是说,如果它大于或者等于start之后所有元素 数量),那么start之后数组所有元素都会被删除

1.3K00

vue3响应式原理

,第一个参数,在返回对象原型上,不是直接属性 var obj = { a: "123" } const handler = { //继承 get:function(obj, propertyKey...另外,由于construct()拦截是构造函数,所以它目标对象必须是函数,否则就会报错。 construct()方法中this指向是handler,不是实例对象。...WeakSet没有size属性,且不可遍历 Map 类似对象,是键值对集合,但各种类型值都可以当做。只有对同一个对象引用,map结构才将其视为同一个。...let arr = [1, 2, 3] const proxy = reactive(arr) proxy.push(4) 此时会修改数组值和长度 此时我们需要判断代理对象是修改属性还是添加长度...hadKey) { console.log("新增属性") //需要数组长度 } else if (oldValue !

32630

JS葵花宝典秘籍笔记,为你保驾护航金三银四

示例: alert("实参长度:" +arguments.length); alert("形参长度: " +arguments.callee.length); // 使用Arguments对象来检查传入参数个数正确性...需要传入一个对象,该传入对象自有可枚举属性(即其自身定义属性,不是其原型链上枚举属性)将为新创建对象添加指定属性值和对应属性描述符。 返回值 一个新对象,带着指定原型对象和属性。...concat()会将参数衔接到array中得到一个新数组并返回,它不会修改array,如果传给concat()某个参数本身是一个数组,则会将该数组元素衔接到array中,不是数组本身。...array.push(value,...); 返回值:把指定值追加到数组数组长度。...,要插入array头部一个或多个值。 返回值数组长度。unshift()不会创建新数组,而是直接修改数组本身。

1.7K10

ES6语法

[]:{}; Object.freeze(obj); //Object.keys(obj)返回一个数组,由obj所有属性或者obj所有索引 Object.keys(obj).forEach...数组解构赋值 按一定模式从数组或对象中提取值为变量赋值叫做解构 模式匹配,等号左右两边模式相同,不能解构赋值undefined 部分匹配,左边变量少于右边数组 右边不是数组 表达式惰性求值,需要赋值时候执行表达式...(obj);返回一个数组,包含对象自身(不含继承)所有键名,不管键名是Symbol或字符串,也不管是否可枚举 首先遍历所有数值,按照数值升序排列 其次遍历所有字符串,按照加入时间升序排列...Object.keys 返回 Object.values 返回值 Object.entriess 返回键值对 参数默认值 es6之前设置参数默认值 a=a||100 es6null判断运算符 a=...WeakSet一个用处是储存DOM节点,不担心这些节点从文档移除时会引发内存泄露。

7910
领券