当前位置: 首页 > 开发者资讯

js中this指向有几种情况?js中数组去重常用方法

  在JavaScript中,this关键字的指向取决于它是如何被调用的。函数中的 this 在调用时是绑定的,完全取决于函数的调用位置,即函数的调用方式。要知道 this 指向什么,你必须知道相关函数是如何被调用的。本文详细为大家介绍关于js中this指向有几种情况,跟着小编一起详细了解下。

  一、js中this指向有几种情况?

  this 的指向取决于函数调用方式,常见有以下 5 种情况:

  默认绑定

  非严格模式下指向全局对象,严格模式下为 undefined。

  javascriptfunction foo() { console.log(this); }foo(); // 浏览器: window / 严格模式: undefined

  隐式绑定(对象方法调用)

  指向调用方法的对象。

  javascriptconst obj = { name: "Alice", sayHi: function() { console.log(this.name); } };obj.sayHi(); // 输出 "Alice"(this 指向 obj)

  显式绑定

  强制绑定 this 到指定对象。

  javascriptfunction greet() { console.log(this.message); }greet.call({ message: "Hello" }); // 输出 "Hello"

  new 绑定

  指向新创建的实例对象。

  javascriptfunction Person(name) { this.name = name; }const alice = new Person("Alice");console.log(alice.name); // 输出 "Alice"

  箭头函数

  继承外层作用域的 this,无自己的 this。

  javascriptconst obj = { name: "Bob", sayHi: () => console.log(this.name) };obj.sayHi(); // 输出 undefined(外层可能是 window)

js中this指向有几种情况.jpg

  二、JavaScript 数组去重常用方法

  1. 使用 Set(ES6+ 最简洁)

  javascriptconst arr = [1, 2, 2, 3];const unique = [...new Set(arr)]; // [1, 2, 3]

  2. 使用 filter + indexOf

  javascriptconst unique = arr.filter((item, index) => arr.indexOf(item) === index);

  3. 使用 reduce

  javascriptconst unique = arr.reduce((acc, item) => acc.includes(item) ? acc : [...acc, item], []);

  4. 对象键值去重

  javascriptconst unique = Object.keys(arr.reduce((acc, item) => {acc[item] = true;return acc;}, {})); // 注意:结果为字符串数组

  5. 排序后比较相邻元素

  javascriptconst sorted = [...arr].sort();const unique = sorted.filter((item, i) => item !== sorted[i + 1]);

  性能建议:

  大数据量优先用 Set。

  兼容性要求高用 filter + indexOf。

  对象/复杂类型需自定义去重逻辑。

  在JavaScript中,`this`的指向取决于函数的调用方式。普通函数作为回调时,this可能丢失绑定。this的取值是在函数被调用时确定的,而不是在函数被定义时确定的。


猜你喜欢