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

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

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

1.6K20

JavaScript数组

概述 数组是一种特殊类型的对象。在 JavaScript 中对数组使用 typeof 运算符会返回 “object”。 数组元素可以通过下表访问(非键值对数组),也可以通过键访问(键值对数组)。...JavaScript 变量可以是对象。数组是特殊类型的对象。...在 JavaScript 中,对象使用命名索引。 2. 属性 length :属性返回数组的长度(数组元素的数目)。 3. 方法 toString() :把数组转换为数组值(逗号分隔)的字符串。...reduce() 方法在数组中从左到右工作。另请参见 reduceRight()。 reduce() 方法不会减少原始数组。 reduce() 方法能够接受一个初始值。...其他 delete 运算符可用于删除数组项。 【注】使用 delete 会在数组留下未定义的空洞。

1.2K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Javascript数组操作

    数组的拷贝 arrayObj.slice(0); //返回数组的拷贝数组,注意是一个新的数组,不是指向 arrayObj.concat(); //返回数组的拷贝数组,注意是一个新的数组,不是指向 7....JavaScript中可以使用一个未声明过的变量,同样,也可以使用一个未定义的数组元素(指索引超过或等于length的元素),这时,length属性的值将被设置为所使用元素索引的值加1。...事实上,使用new Array()形式创建的数组,其初始长度就是为0,正是对其中未定义元素的操作,才使数组的长度发生变化。 大多数其他编程语言不允许直接改变数组的大小,越界访问索引会报错。...描述:reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。...JavaScript的数据类型分为:值类型和引用类型(地址值);而常见的引用类型有Object和Array/数组的存储模型中,如果是诸如Number,String之类的类型数据会被直接压入栈中,而引用类型只会压入对该值的一个索引

    3.9K80

    24个简单的示例复习下JS数组的相关方法

    翻译 | 杨小二 1、创建数组 在Javascript中有多种创建数组的方法,最简单的一种是简单地将数组值分配给变量。...例如: 8、从数组中删除一个元素 使用 Javascript 操作符delete可以轻松删除数组元素; 但是 delete 方法有一个问题,因为它在数组中留下了未定义的空洞,所以我们应该使用pop(...)或shift()而不是 delete。...13、反转数组 Javascript 提供了一个reverse () 方法来反转数组。 例如: 14、数字排序 在 Javascript 中,sort()方法用于按字母顺序对字符串数组进行排序。...23、reduce ()方法 此方法在每个数组元素上运行一个函数以减少到单个值而不更改原始数组。 例如: 上面的例子返回数组所有元素的总和。

    1K20

    一篇文章完全掌握 JavaScript 数组操作

    JavaScript 中的数组是什么? 在开始之前,你需要先了解数组的真正含义。 在 JavaScript 中,数组是一个用于存储不同数据类型的变量。它将不同的元素存储在一个盒子中,供以后使用。...JavaScript 的 join() 方法将所有数组元素组合成一个字符串。 它类似于 toString() 方法,但在这里你可以指定分隔符而不是默认的逗号。...它返回子数组而不是子字符串。 此方法复制数组的给定部分,并将复制的部分作为新数组返回。 它不会改变原始数组。.../en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce】找到。...它类似于 .some(),但它不是要查找符合的特定条件,而是检查数组是否包含特定项。

    1.1K30

    JavaScript ES6  让我们写得少,做得多

    例如,当我们有一个触发事件的按钮时,或者当您想在 JavaScript 中选择 HTML 元素时,请使用 const 而不是 var 。...箭头函数 箭头函数非常棒,使您的代码更具可读性,更具结构性,并且看起来像现代代码,而不是使用这个: // ES5 function myFunc(name) { return 'Hello ' +...默认参数 忘记编写参数时,它不会返回未定义的错误,因为该参数已在默认值中定义。因此,当您使用遗漏参数运行函数时,它将采用默认参数的值,并且不会返回错误!...Rest 参数和 Spread 运算符 Rest 参数用于获取数组的参数,并返回一个新数组。...spread 运算符与 rest 参数具有相同的语法,但是 spread 运算符采用数组本身而不仅仅是参数。我们可以使用 Spread 参数来获取数组的值,而不是使用 for 循环或任何其他方法。

    63121

    JavaScript ES6  让我们写得少,做得多

    例如,当我们有一个触发事件的按钮时,或者当您想在 JavaScript 中选择 HTML 元素时,请使用 const 而不是 var。...了解更多块级作用域请看ES6之块级作用域 箭头函数 箭头函数非常棒,使您的代码更具可读性,更具结构性,并且看起来像现代代码,而不是使用这个: // ES5 function myFunc(name)...默认参数 当您忘记编写参数时,它不会返回未定义的错误,因为该参数已在默认值中定义。因此,当您使用遗漏参数运行函数时,它将采用默认参数的值,并且不会返回错误!...Rest 参数和 Spread 运算符 Rest 参数用于获取数组的参数,并返回一个新数组。...spread 运算符与 rest 参数具有相同的语法,但是 spread 运算符采用数组本身而不仅仅是参数。我们可以使用 Spread 参数来获取数组的值,而不是使用 for 循环或任何其他方法。

    81620

    分享近百道JavaScript 基础面试题,帮助你巩固JavaScript 基础知识

    JavaScript 中的数据类型包括字符串、数字、布尔值、对象、未定义和空值。 3、null和undefined有什么区别?...你可以使用 Array.isArray() 方法检查变量是否为数组,如果变量是数组则返回 true,否则返回 false。 27. JavaScript 中 filter() 方法的作用是什么?...JavaScript 中 reduce() 方法的用途是什么? reduce() 方法对累加器和数组中的每个元素应用一个函数,产生单个值。 36....JavaScript 中 reduce() 方法的用途是什么? reduce() 方法将函数应用于累加器和数组中的每个元素,将其减少为单个值。 64....slice() 方法返回数组的浅表副本,而 splice() 方法通过删除、替换或添加元素来更改数组的内容。 75.解释JavaScript中事件冒泡和事件捕获的概念。

    34610

    JavaScript 各版本介绍和特性

    如果x是一个不包含格式良好的数字字面的字符串,Number将会生成一个NaN而不是一个错误。 Stirng现在可以将指定的对象转换为字符串。...它不会再将未定义的元素转换为null并且排序到数组最大的位置。 String.prototype.split() 它即可以带一个确定的字符串参数去分割目标字符串,也可以带一个正则表达式参数。...Array.prototype.push(): 在JavaScript 1.2中, push 方法返回最后一个被添加到数组的元素。在JavaScript 1.3下, push 返回数组新的长度。...而在JavaScript 1.3,splice方法通常返回一个包含被删除的元素的数组。如果只有一个元素被移除,则返回一个只包含一个元素的数组。...,而不是只支持真正数组.

    90030

    37个JavaScript基本面试问题和解答(建议收藏)

    这种行为也被认为是遵循了在JavaScript中将一行开头大括号放在行尾的约定,而不是在新行的开头。如此处所示,这不仅仅是JavaScript中的一种风格偏好。 7、什么是NaN?它的类型是什么?...将该对象传递给Object.keys将返回一个包含这些设置键的数组(即使它们的值未定义)。 14、下面的代码将输出到控制台,为什么?...reverse()方法返回对数组本身的引用(即,在这种情况下为arr1)。因此,arr2仅仅是对arr1的引用(而不是副本)。...JavaScript引擎将使阵列插槽3至9成为“空插槽”。 b)在这里,a [6]将输出未定义的值,但时隙仍为空,而不是未定义的。在某些情况下,这可能是一个重要的细微差别。...该表达式将被评估为true,因为NULL将被视为任何其他未定义的变量。 注意:JavaScript区分大小写,我们在这里使用NULL而不是null。 36、代码返回后会怎么样?

    3K10

    JavaScript初探 三 (学习js数组)

    属性 length:返回数组的长度(数组的元素数目) var arr = ["Huawei","China","Mirror"]; arr.length; // 结果:返回 3 由于arr索引是从零开始...,而length数目计算是从1开始的 所以length-1 === 数组最后一个元素的下标索引 访问数组最后一个元素的技巧: var arr[arr.length - 1] ; // 结果返回 Mirror...var y = arr[0] ; //返回 undefined 对象和数组的区别 在JavaScript中,数组 使用数字索引 在JavaScript中,对象使用命名索引 对象和数组的不同应用...第一个参数:定义新元素添加的元素 第二个参数:定义删除多个元素 其余参数: 被忽略,没有新元素添加 splice()会返回被删除的元素 而原数组的内容就会被修改 合并数组 concat...、零或正值,这取决于参数 function(a,b){return a-b} 当 sort() 函数比较两个值时,会将值发送到比较函数,并根据返回的值,对这些值进行排序。

    1.7K30
    领券