📜  javascript 长度 - Javascript (1)

📅  最后修改于: 2023-12-03 15:31:46.501000             🧑  作者: Mango

Javascript 长度

在 Javascript 中,我们常常需要获取数组、字符串或对象等数据类型的长度。这个长度通常表示其中元素的个数或属性的个数。在本文中,我们将探讨如何获取不同数据类型的长度,并讨论一些需要注意的问题。

数组长度

获取数组长度是 Javascript 中最常见的操作之一。我们可以使用数组对象的 length 属性来获得数组中元素的个数。下面是一个演示如何获取数组长度的例子:

const arr = [1, 2, 3, 4, 5];
const len = arr.length;
console.log(len); // 输出 5

需要注意的是,数组的 length 属性不一定等于数组中元素的个数。它表示的是数组中最后一个元素的索引值加上 1。如果数组中包含了 undefined 元素,它们也会计入数组长度中。例如:

const arrWithUndef = [1, 2, undefined, 4, 5];
const lenWithUndef = arrWithUndef.length;
console.log(lenWithUndef); // 输出 5
字符串长度

访问字符串长度很简单,只需使用字符串对象的 length 属性即可。下面是一个演示如何获取字符串长度的例子:

const str = "Hello, world!";
const len = str.length;
console.log(len); // 输出 13

需要注意的是,字符串中包含的 Unicode 字符可能会影响到字符串的长度。某些字符,如表情符号,会占用多个 Unicode 代码点。例如:

const strWithEmoji = "Hello, 😊!";
const lenWithEmoji = strWithEmoji.length;
console.log(lenWithEmoji); // 输出 9
对象长度

对象的长度有多种定义方式。我们在这里将讨论两种最常用的定义方式。

定义方式 1:Object.keys(obj).length

使用 Object.keys(obj) 可以获取一个对象的属性列表。由于列表本身就是数组,我们可以使用 length 属性来获取属性的个数。下面是一个演示如何获取对象长度的例子:

const obj = { a: 1, b: 2, c: 3 };
const len = Object.keys(obj).length;
console.log(len); // 输出 3

需要注意的是,只有对象的可枚举属性才会计入对象的长度。如果一个属性的 enumerable 特性为 false,则不会出现在属性列表中。例如:

const objWithNonEnumerableProp = { a: 1 };
Object.defineProperty(objWithNonEnumerableProp, "b", {
  value: 2,
  enumerable: false,
});

const lenWithNonEnumerableProp = Object.keys(objWithNonEnumerableProp).length;
console.log(lenWithNonEnumerableProp); // 输出 1

如果要获取所有属性(包括不可枚举属性)的个数,可以使用 Object.getOwnPropertyNames(obj).length

定义方式 2:Reflect.ownKeys(obj).length

使用 Reflect.ownKeys(obj) 可以获取一个对象的所有属性,包括不可枚举属性。由于属性列表本身就是数组,我们可以使用 length 属性来获取属性的个数。

const obj = { a: 1 };
Object.defineProperty(obj, "b", {
  value: 2,
  enumerable: false,
});

const len = Reflect.ownKeys(obj).length;
console.log(len); // 输出 2

需要注意的是,使用 Reflect.ownKeys(obj) 可能会获取到一些非对象属性。例如:

const objWithSymbolProp = { a: 1 };
const sym = Symbol("b");
objWithSymbolProp[sym] = 2;

const lenWithSymbolProp = Reflect.ownKeys(objWithSymbolProp).length;
console.log(lenWithSymbolProp); // 输出 2
结论

在 Javascript 中,获取数据类型的长度是非常常见的操作。不同数据类型的长度计算方式略有不同。当我们需要处理数据时,我们需要注意各种计算方式的差异,以确保得到正确的结果。