日期:2025/04/02 17:06来源:未知 人气:53
Javascript对象方法概览
Javascript对象方法,作为内置函数定义的属性,为处理单个对象和提取信息提供了高效手段。其语法形式为ObjectName.methodName()。接下来,我们将一起探索Javascript中七个核心对象方法,它们将助你更自如地运用对象原型,提升开发效率。 1、Object.is()
Object.is() 方法用于判断两个值是否严格相等。其语法为 Object.is(value1, value2),其中 value1 和 value2 表示要比较的两个值。该方法返回一个布尔值,表示这两个值是否严格相等。这种判断方式与 === 操作符的结果相同。
示例: // Case 1: 判断结果与使用 '===' 相同 Object.is('hello', 'hello'); // 返回 true Object.is(1, 1); // 返回 true Object.is(null, null); // 返回 true
// Case 2: 判断浮点数和字符串不相等 Object.is(0.1 + 0.2, 0.3); // 返回 false,因为浮点数运算存在精度问题 Object.is('0.3', 0.3); // 返回 false,字符串与数字类型不相等
通过使用 Object.is() 方法,你可以更准确地判断两个值是否严格相等,从而避免因类型转换或浮点数运算精度问题导致的错误判断。 2、NaN 的比较
NaN(Not a Number,非数字)是一个特殊的值,它不等于任何值,包括其自身。因此,使用 === 或 Object.is() 来进行比较时,NaN 总是返回 false。这是 JavaScript 中 NaN 特有的行为。
示例: // Case 1: 比较 NaN 与其他值 Object.is(NaN, NaN); // 返回 false,尽管 NaN 本身并不等于任何值,但此处 Object.is() 返回 false Object.is('foo', NaN); // 返回 false,NaN 不等于任何值,包括字符串
需要注意的是,尽管 NaN 本身与其他任何值都不相等,但 JavaScript 中提供了 isNaN() 函数来检测一个值是否为 NaN。这个函数在处理某些特殊情况时非常有用。
通过了解 NaN 的特性,你可以更准确地处理和比较不同类型的值,避免因误判而导致的问题。 Object.is(-0, NaN); // 返回 false,尽管 -0 是一个数值,但与 NaN 进行比较时,由于 NaN 的独特性质,结果仍然为 false。 Object.is(NaN, NaN); // 返回 true,因为 NaN(Not a Number)是一个特殊的值,其与自身相等,所以Object.is方法返回true。 Object.is(NaN, NaN); // 返回 true,因为NaN(Not a Number)是一个特殊的值,它表示非数字,且其与自身相等,所以使用Object.is方法进行比较时,会返回true。 );// true
Object.is(NaN, Number.NaN); // true
2、Object.assign()
Object.assign() 方法用于将一个或多个源对象的所有可枚举自身属性复制到目标对象中。其语法为:Object.assign(target, ...sources),其中,target 是目标对象,修改后的 target 会返回;sources 是源对象,包含需要复制的属性。这个方法会返回修改后的目标对象。
例如:
const target = { a: 1, b: 2 };
const source = { b: 3, c: 4 };
Object.assign(target, source); // 返回 {a: 1, b: 3, c: 4},目标对象已被源对象的属性覆盖。 1, b: 2};
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
console.log(target); // expected output: Object { a: 1, b: 4, c: 5 } console.log(returnedTarget); // expected output: Object { a: 1, b: 4, c: 5 }
注意:在Object.assign()方法中,如果源对象中的属性具有相同的键,那么目标对象中的相应属性将被源对象中的属性所覆盖。也就是说,较晚出现的属性值会覆盖较早出现的。 3、Object.entries()
Object.entries() 方法用于获取对象自身的可枚举字符串键值对,并以数组的形式返回。它与 for...in 循环类似,但不会枚举原型链中的属性。属性的顺序与手动循环遍历对象属性时的顺序保持一致。
语法:Object.entries(obj)
参数:obj,即要获取其键值对的对象。
返回值:一个包含对象自身可枚举字符串键值对的数组。
示例:
const object1 = { name: "David", age: 30};const entries = Object.entries(object1);console.log(entries); // 输出:[['name', 'David'], ['age', 30]]
23};
for (const [key, value] of Object.entries(object1)) {
console.log(${key}: ${value}
); // 输出:"name: David" 和 "age: 23"
}
4、Object.values()
Object.values() 方法用于返回一个给定对象自身的可枚举属性值的数组,其返回的顺序与使用 for...in 循环遍历该对象时的顺序保持一致。
语法:Object.values(obj)
参数:obj,即要获取其属性值的对象。
返回值:一个包含对象自身可枚举属性值的数组。
示例:
const object1 = { name: "David", age: 23};const values = Object.values(object1);console.log(values); // 输出:["David", 23]
42,c:false }; console.log( Object.values(object1)); // 输出预期结果:["somestring", 42, false]
在上述代码中,我们首先定义了一个名为object1
的对象,它包含三个属性:一个字符串somestring
,一个数字42
,以及一个布尔值false
。接着,我们使用Object.values()
方法获取该对象的所有可枚举属性值,并将它们存储在数组中。最后,我们通过console.log()
打印出这个数组,预期的输出结果是一个包含三个元素的数组:["somestring", 42, false]。
5、Object.prototype.hasOwnProperty()
hasOwnProperty() 是一个对象的方法,它返回一个布尔值,用以表明对象自身是否具有特定的属性。如果该属性是对象直接拥有的,即便是其值为null或undefined,该方法也会返回true。若该属性是继承的或是根本未声明的,则返回false。
其语法为:hasOwnProperty(prop),其中prop为要检测的属性的字符串名称或符号。此方法将返回一个布尔值,表明对象是否拥有指定的属性。
例如:
const object1 = {}; object1.property1 = 'somevalue'; console.log(object1.hasOwnProperty('property1')); // 输出:true
在上述示例中,我们创建了一个空对象object1,并给它添加了一个属性property1。随后,我们使用hasOwnProperty()方法检测该对象是否拥有property1属性,并打印出结果,预期输出为true,因为property1是object1直接拥有的属性。 42; console.log(object1.hasOwnProperty('property1')); // 预期输出:true console.log(object1.hasOwnProperty('toString')); // 预期输出:false console.log(object1.hasOwnProperty('hasOwnProperty')); // 预期输出:false
在这个示例中,我们继续使用hasOwnProperty()方法来检测对象object1是否拥有特定的属性。首先,我们检测了它是否拥有'property1'属性,由于这是我们直接添加到对象上的属性,因此预期输出为true。接着,我们尝试检测对象是否拥有'toString'和'hasOwnProperty'这两个属性,由于这两个属性是Object.prototype的内置属性,并非对象直接拥有,因此预期输出均为false。 6、Object.keys()
Object.keys() 方法是 JavaScript 中用于获取对象自身可枚举属性名称的数组的实用工具。它按照与普通for-in循环相同的顺序来迭代这些属性。
语法上,Object.keys() 方法接受一个对象作为参数,并返回一个包含该对象所有可枚举属性名称的字符串数组。
例如,对于以下对象:
const object1 = { a: 'somestring', b: / some value /};
调用 Object.keys(object1)
将返回一个数组,其中包含 ['a', 'b'] 这些属性名称。
42,c:false
};
console.log(
Object.keys(object1));
// expected output: Array ["a", "b", "c"]
在JavaScript中,Object.keys()方法不仅限于获取对象自身可枚举的属性名称,它还可以处理更复杂的情况。例如,当对象中包含数字键或布尔值键时,这些键名同样会被包含在返回的数组中。因此,对于上述示例中的对象:
const object1 = { a: 'somestring', b: / some value /, 42: false, // 注意这个数字键 c: false // 以及这个布尔值键};
调用 Object.keys(object1)
将返回一个包含所有可枚举属性名称的数组,即 ['a', 'b', '42', 'c']。尽管在这些示例中,数字键和布尔值键并未直接参与对象的属性值,但它们仍然被视为对象的属性,因此也会被Object.keys()方法返回。
7、Object.prototype.toString
toString 方法是 JavaScript 中用于返回表示对象字符串的方法。当对象需要被转换为文本值或以字符串形式引用时,该方法会被自动调用。默认情况下,这个方法由所有从 Object 继承的对象所共享。
语法上,toString 方法没有参数。它返回一个字符串,该字符串表示对象。
以下是一个简单的例子来说明其用法:
function Dog(name) { this.name = name;}const dog1 = new Dog('Gabby');Dog.prototype.toString = function dogToString() { return this.name;};console.log(dog1.toString()); // 预期输出: "Gabby"
此外,值得注意的是,对于 Numbers 和 Big Ints 类型的对象,toString 方法还支持一个可选参数 radix,其取值范围必须在 2 到 36 之间。 8、Object.freeze()
Object.freeze() 方法用于冻结一个对象,使其变得不可更改。这意味着,一旦对象被冻结,就无法再向其添加新属性,无法删除现有属性,也无法更改现有属性的特性或值。此外,冻结对象还能防止其原型被更改。
其语法为:Object.freeze(obj),其中 obj 是要冻结的对象。该方法返回的是传递给函数的对象本身。
以下是一个简单的例子来演示其用法:
const obj = { prop1: 'Hello', prop2: 'World'};Object.freeze(obj);// 尝试修改冻结对象的属性obj.prop1 = 'Goodbye'; // 这将不会改变 prop1 的值,因为对象已被冻结
在上述例子中,尽管我们尝试修改了冻结对象的属性,但该属性并未发生变化,因为对象已被冻结,其属性无法被更改。 42}; Object.freeze(obj);
// 在严格模式下,尝试向冻结对象添加新属性将抛出错误 try { obj.prop = 33; // 这将抛出错误,因为在严格模式下尝试向冻结对象添加新属性是不允许的 } catch (error) { console.error(error); }
console.log(obj.prop); // 预期输出: 42
在上述代码中,尽管我们尝试向冻结对象添加了一个新属性,但由于这是严格模式下的禁止行为,因此会抛出一个错误。而通过console.log语句,我们可以确认在尝试添加新属性之前,对象的属性值保持不变。