美文网首页
对JavaScript的理解

对JavaScript的理解

作者: 面朝南的落地窗 | 来源:发表于2019-03-07 17:14 被阅读0次
  1. 如何复制一个Js对象?
    ① 通过 JSON 对象提供的 stringify 和 parse 方法组合使用的方式实现
// 勉强也算一句话解决了,问题在于性能不理想。
var a = {}
var b = JSON.parse(JSON.stringify(a))

② 通过在函数中以返回值的形式生成新对象。

// 这种方式的缺点在于要以字面量的形式定义一个原始对象作为模板。
a = function(){ 
return { prop:"123" } 
}
b = a()
d = a()
b === d // false

③ 通过 ES2015 中提供的 Object.assign() 方法来复制。

// 简洁明了,性能良好的解决方案
var a = {}
var b = Object.assign({},a)

复制一个对象的最佳方案是采用 Object.assign() 方法来实现。

  1. 如何判断一个元素是否在集合中
    由于 Js 并没有实现类似 array.contains(item) 的方法,因此只能通过元素在集合中的索引判断
var isSelected = function (row) {
  return (selection || []).indexOf(row) > -1;
}
  1. 判断一个变量是否为非空对象
    首先 null 的类型是对象,如果在控制台输入 typeof null 会返回 "object",事实上我们要检测一个非空数组,就要先排除 null 值的可能。
var isObject = function(obj) {
  return obj !== null && typeof obj === 'object'
}
  1. 如何查询一个数组并返回元素的子集
    这里用到了数组的 filter 方法,此方法具有以下特点:
    a. 需要传入一个回调函数作为参数,此函数应返回一个布尔值。
    b. filter 执行时会对数组中的每一个元素执行一边回调函数。
    c. filter 的返回值为一个新数组,其成员为原数组中返回值为 true 的元素。
var users = allUsers.filter((user) => user.loged === true)
  1. 如何判断一个对象没有任何属性
    在 Js 中两个空对象进行比较会有什么结果呢?
var a = {}
a === {} // false

在 Js 中对 object 类型的数据应用等于操作符时,比较的是两个变量是否指向同一个引用,也就是说在内存中是否为同一个地址。

而我们期待的结果是比较两个对象在逻辑上是否具有相同的属性,空对象是一个特例,它们不具有任何属性。

if (Object.keys(search).length !== 0) {
    args = Object.assign({}, args, search)
}

这里用到 Object.keys() 方法,获取对象键的集合并判断其长度是否为 0 即可。

  1. 如何使用循环删除数组中的多个元素
for (let i = 0, let j = delIds.length - 1; i < j; i++) {
    allItems.splice (delIds[i], 0)
}

如上根据索引来循环删除原始数组中的元素是否可行呢,如果我们执行这段代码是无法得到预期结果的。原因在于当前面的元素被删除时,后面元素的索引发生了变化,在用删除前的索引就无法定位正确的元素,解决的方法有两种:

  • 通过倒序循环,获取被删除元素的索引,从后向前遍历删除。
for (let i = delIds.length - 1; i > 0; i++) {
    allItems.splice (delIds[i], 0)
}
  • 通过数组的两个方法即 forEach 配合 indexOf 删除,这种方法需要获取被删除元素本身,动态获取它的索引。
delItems.forEach ((item) => {
    allItems.splice (allItems.indexOf(item), 0)
})

ps: 此文章抄的,感觉很好想做笔记摘抄的。

相关文章

  • 对JavaScript的理解

    如何复制一个Js对象?① 通过 JSON 对象提供的 stringify 和 parse 方法组合使用的方式实现 ...

  • 对JavaScript函数的理解

    JavaScript函数是JavaScript中非常重要的组成部分,JavaScript编程中,绝大部分时候都是在...

  • 对JavaScript继承的理解

    本篇文章会分别从ES5和ES6的角度上来学习JS的继承。 由于js不像java那样是真正面向对象的语言,js是基于...

  • 加深对 JavaScript This 的理解

    欢迎来我的博客阅读:《加深对 JavaScript This 的理解》 我相信你已经看过很多关于 JavaScri...

  • 对JavaScript原型的理解

    JavaScript中是没有类的概念的,有的只是原型和对象。 在说原型之前先说说JavaScript中对象的三种类...

  • Javascript 整理对this的理解

    面向对象语言和javascript语言中关于this的区别 在JAVA等面向对象的语言中,this关键字的含义是明...

  • javascript中对this的理解

    //1.函数预编译过程中 this --> window //AO this: window function t...

  • javascript的变量声明和函数提升

    要理解javascript的变量声明和函数提升,重要的是理解浏览器对javascript代码的处理过程。 包括变量...

  • 我对JavaScript对象的理解

    原文地址在我的博客, 转载请注明出处,谢谢! 标签: [es5对象、原型, 原型链, 继承] 注意(这篇文章特别长...

  • JavaScript 对作用域的理解

    全局作用域 在全局作用域中定义的变量,在整个上下文中都是可以访问的。 函数作用域 在函数作用域中定义的变量,只能在...

网友评论

      本文标题:对JavaScript的理解

      本文链接:https://www.haomeiwen.com/subject/mhncpqtx.html