文章详情:excelperfect 本文的题目比较拗口,用一个示例来说明,如下图1所示,是一个记录员工值班日期的表,在安排每天的值班时,需要查看员工最近一次值班的日期,以免值班时间隔得太近。...A2:A10中的值,如果相同返回TRUE,不相同则返回FALSE,得到一个由TRUE和FALSE组成的数组,然后与A2:A10所在的行号组成的数组相乘,得到一个由行号和0组成的数组,MAX函数获取这个数组的最大值...,也就是与单元格D2中的值相同的数据在A2:A10中的最后一个位置,减去1是因为查找的是B2:B10中的值,是从第2行开始的,得到要查找的值在B2:B10中的位置,然后INDEX函数获取相应的值。...图2 使用LOOKUP函数 公式如下: =LOOKUP(2,1/($A$2:$A$10=$D$2),$B$2:$B$10) 公式中,比较A2:A10与D2中的值,相等返回TRUE,不相等返回FALSE...组成的数组,由于这个数组中找不到2,LOOKUP函数在数组中一直查找,直至最后一个比2小的最大值,也就是数组中的最后一个1,返回B2:B10中对应的值,也就是要查找的数据在列表中最后的值。
,在函数外部无法被访问 函数的参数也是函数内部的局部变量 不同函数内部声明的变量无法互相访问 函数执行完毕后,函数内部的变量实际被清空了 块作用域 在 JavaScript 中使用 {} 包裹的代码称为代码块... JavaScript 中除了变量外还有常量,常量与变量本质的区别是【常量必须要有值且不允许被重新赋值】,常量值为对象时其属性和方法允许重新赋值。...作用域链本质上是底层的变量查找机制,在函数被执行时,会优先查找当前函数作用域中查找变量,如果当前作用域查找不到则会依次逐级查找父级作用域直到全局作用域,如下代码所示: // 全局作用域...相同作用域链中按着从小到大的规则查找变量 子作用域能够访问父作用域,父级作用域无法访问子级作用域 1.4 闭包 闭包是一种比较特殊和函数,使用闭包能够访问函数作用域中的变量。...获取剩余单元值,但只能置于最末位 允许初始化变量的默认值,且只有单元值为 undefined 时默认值才会生效 注:支持多维解构赋值,比较复杂后续有应用需求时再进一步分析 3.2 对象解构 对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法
在HTML中写JavaScript 单独写JavaScript 注释 基本语法入门 变量 条件控制 调试 数据类型 map set iterator 函数 let,const,var 日期Date JSON...JavaScript是世界上最流行的脚本语言 Javascript的历史 大部分浏览器支持es5代码,开发环境–线上环境,版本不一致 在HTML中写JavaScript <!...null和undefined null空 undefined未定义 数组 JS中可以是一系列不同类型的对象 var arr = [1,2,3,'hello',null,true] 长度 arr.length...person.name 动态的添加 person.hhh = “hahaha”; 判断属性值是否在这个对象中 'age' in person //判断age是否在person中 Map和...a * b; // 函数返回 a 和 b 的乘积 } 在 JavaScript 函数中声明的变量,会成为函数的局部变量。
在多维数组上使用时,它将转换为一维。默认情况下,flat()只会将数组展平一级。 但是页可以指定级数,并在调用时作为参数传递。如果不确定需要多少级,也可以使用 Infinity。...这样就可以在展平过程中使用原始数组中的每个元素。当在对数组进行展平操作的同时又要修改内容时很方便。...现在能够对那些有问题的代码段进行分类,并且可以将它们转换回其原始表示形式。 Symbol.prototype.description 符号是在 ES2015(ES6)中引入的新数据类型。...它们通常用于标识对象属性。ES2019 增加了 description 属性。这个属性是只读的,无法更改它的值。它用来返回给定符号的描述。 要牢记两点。首先,创建符号时描述不是必须的,而是可选的。...它的缺点是在返回的字符串中还包含 Symbol()。另一个区别是 toString() 方法永远不会返回不存在的undefined 描述。
,在函数外部无法被访问 函数的参数也是函数内部的局部变量 不同函数内部声明的变量无法互相访问 函数执行完毕后,函数内部的变量实际被清空了 块作用域 在 JavaScript 中使用 {} 包裹的代码称为代码块...; // 报错 JavaScript 中除了变量外还有常量,常量与变量本质的区别是【常量必须要有值且不允许被重新赋值】,常量值为对象时其属性和方法允许重新赋值。.../assets/scope.png)] 作用域链本质上是底层的变量查找机制,在函数被执行时,会优先查找当前函数作用域中查找变量,如果当前作用域查找不到则会依次逐级查找父级作用域直到全局作用域,如下代码所示...相同作用域链中按着从小到大的规则查找变量 子作用域能够访问父作用域,父级作用域无法访问子级作用域(就近原则) 1.4 闭包 闭包是一种比较特殊和函数,使用闭包能够访问函数作用域中的变量。...获取剩余单元值,但只能置于最末位 允许初始化变量的默认值,且只有单元值为 undefined 时默认值才会生效 注:支持多维解构赋值,比较复杂后续有应用需求时再进一步分析 3.2 对象解构 对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法
2.1 简单值 简单值在Json中的表示可以是字符串、数值、布尔值和null!...在JS中上面两种方法都可以表示对象,但是在Json中没有变量的概念。...其次,没有末尾的分号(因为这不是JavaScipt语句,所以也不需要分号), 所以在Json的对象中,对象的属性必须是字符串(也就是说要加双引号),属性的值可以是简单值,数组,对象,所以在Json中的对象表现形式如下...在最简单的情况下,这两个方法风别用于把JavaScript对象序列化为JSON字符串和把JSON字符串解析为原生JavaScript值。...JSON.stringify()除了接收第一个参数(要序列化的JavaScript对象外),还可以接收另外两个参数,这两个参数用于指定以不同的方式序列化JavaScript对象。
增强的对象字面量:支持更简洁的对象属性和方法定义。 符号(Symbol):一种新的基本数据类型,用于创建唯一的标识符。 迭代器和生成器:用于控制循环行为和生成序列值。...在ES6之前,JavaScript语言的功能和语法相对较为古老和有限,缺乏许多现代编程语言的特性,导致在大型项目开发中容易出现混乱和难以维护的情况。...具体来说,使用 let 声明的变量在 for 循环中,每次迭代都会创建一个新的变量绑定。这与 var 的行为不同,var 声明的变量在函数级别上是共享同一个变量的。...变量在整个循环过程中是共享的,所以当 setTimeout 回调函数执行时,i 的值已经变成了 10(循环结束后的值),因此会输出 10 十次。...块级作用域 提升 有 无 无 重复声明 允许 不允许 不允许 必须初始化 否 否 是 重新赋值 允许 允许 不允许 总结 ES6 为JavaScript带来了许多强大的新特性,使开发者能够编写更加简洁
,在函数外部无法被访问 函数的参数也是函数内部的局部变量 不同函数内部声明的变量无法互相访问 函数执行完毕后,函数内部的变量实际被清空了 块作用域 在 JavaScript 中使用 {} 包裹的代码称为代码块... JavaScript 中除了变量外还有常量,常量与变量本质的区别是【常量必须要有值且不允许被重新赋值】,常量值为对象时其属性和方法允许重新赋值。...作用域链本质上是底层的变量查找机制,在函数被执行时,会优先查找当前函数作用域中查找变量,如果当前作用域查找不到则会依次逐级查找父级作用域直到全局作用域,如下代码所示: // 全局作用域...相同作用域链中按着从小到大的规则查找变量 子作用域能够访问父作用域,父级作用域无法访问子级作用域 闭包 闭包是一种比较特殊和函数,使用闭包能够访问函数作用域中的变量。...获取剩余单元值,但只能置于最末位 允许初始化变量的默认值,且只有单元值为 undefined 时默认值才会生效 注:支持多维解构赋值,比较复杂后续有应用需求时再进一步分析 对象解构 对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法
Node.js 中自带了一个叫做 http 的模块,我们在我们的代码中请求它并把返回值赋给一个本地变量。 这把我们的本地变量变成了一个拥有所有 http 模块所提供的公共方法的对象。...Node.js 的 require 方法中的文件查找策略如下: 由于 Node.js 中存在 4 类模块(原生模块和3种文件模块),尽管 require 方法极其简单,但是内部的加载却是十分复杂的,其加载优先级也各自不同...如下图所示: 从文件模块缓存中加载 尽管原生模块与文件模块的优先级不同,但是都会优先从文件模块的缓存中加载已经存在的模块。 从原生模块加载 原生模块的优先级仅次于文件模块缓存的优先级。...如果 X.json 是一个文件, 解析 X.json 为 JavaScript 对象并停止执行。 4. 如果 X.node 是一个文件, 将 X.node 作为二进制插件载入并停止执行。...如果 X/index.json 是一个文件, 解析 X/index.json 为 JavaScript 对象并停止执行。 3.
不同的在于:slice返回截取后的新实例,splice在原array实例上操作,更详细的请见下文链接。 JS中数组对象详解 8、如何阻止表单提交?...只有Math和Global(在浏览器环境中,Global就是Window) 22、列举Javascript的本地对象。...3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。...说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。...②在jQuery中有专门的获取服务器json数据的方法,getJSON(),在回调中,jQuery会自动将json转换为javascript对象。 8、addClass、css有何用途?
访问某个对象通常要用脚本。通过把重复访问的对象存储在用户定义的变量中,以及在后续对该对象的引用中使用变量,可以立即实现性能的提升。 ...将变量保存在本地作用域内能让 JavaScript 更快地访问它们。 局部变量是基于最具体的作用域的,并且可能会穿过多个级别的作用域,因此查找这一动作可能导致出现通用的查询。...在一个它前面没有变量声明的局部变量中定义函数作用域时,需要在每个变量之前加上 let 或 const,以便定义当前作用域,防止查找并加速代码执行。 ...对于更高级的分析,你可以使用 Firefox 或 Chrome 中的开发人员工具“性能”视图来分析不同的指标,例如: ?...对于基于 Node.js 构建的应用程序,NodeSource Platform 也是一种非常好、影响低的方式,它可以在非常精细的级别上探索应用程序性能。
-- 注释节点值 --> 参考: 在整个body中找到所有的注释(通过JS来操作节点寻找)-CSDN社区 // 从 body 开始向内查找 var bodyElement = document.getElementsByTagName..., 而不是 replaceWith 后的 // 注意: 经测试: 不同节点.replaceWith(node1) 时, node1 对象不要重复使用, 否则可能导致想象外效果 temp1.replaceWith...请参阅 XMLHttpRequest 中的 HTML 以了解使用 XHR 获取 HTML 内容的更多信息。 json response 是一个 JavaScript 对象。...这个对象是通过将接收到的数据类型视为 JSON 解析得到的。 text response 是一个以 DOMString 对象表示的文本。...二级域名是在一级域名下衍生的,比如有个一级域名为mcrfun.com,则blog.mcrfun.com和www.mcrfun.com均是其衍生出来的二级域名。
对象的理解 答:this总是指向函数的直接调用者(而非间接调用者); 如果有new关键字,this指向new出来的那个对象; 在事件中,this指向触发这个事件的对象,特殊的是,IE中的...可以看看我前面的文章 this在不同情况下的指向 4、eval是做什么的?...在IE中虽然JavaScript对象通过标记清除的方式进行垃圾回收,但BOM与DOM对象却是通过引用计数回收垃圾的,也就是说只要涉及BOM及DOM就会出现循环引用问题。...(1)工厂模式: 主要好处就是可以消除对象间的耦合,通过使用工程方法而不是new关键字。将所有实例化的代码集中在一个位置防止代码重复。...,即解决了重复实例化的问题 ,又解决了对象识别的问题,该模式与工厂模式的不同之处在于: 构造函数方法没有显示的创建对象 (new Object()); 直接将属性和方法赋值给 this 对象;
(9)、对象在查找成员时先找本对象本身的成员,然后查找构造器的原型中的成员,一步一步向上查找,最终查询Object的成员,这就是原型链。...6.1、覆盖(Override) JavaScript没有接口,但支持重写功能,根据原型链中查找成员的规则自身成员的优先级高于原型链中成员的优先级,遵照就近原则。...猫在吃小鱼 Cat.prototype.eat严格意义上来说并不是重写了Animal中的eat方法而是在自己的原型对象中添加了一个优先级更高的eat方法,使和call或apply可以调用父类中的方法且可以指定执行上下文为当前对象...6.2、重载(Overload) 面向对象中同名方法不同参数满足不同的功能需要就是重载,重载增加了灵活性。JavaScript是弱类型语言,没有重载,但可以模拟实现。...{"price":03,"size":1.}在JavaScript中是正确的,在JSON中就需要修改成{"price":3,"size":1.0}。 4、字符串只能是Unicode编码。
CommonJS 的终极目标是制定一个像 C++ 标准库一样的规范,使得基于 CommonJS API 的应用程序可以在不同的环境下运行,就像用 C++ 编写的应用程序可以使用不同的编译器和运行时函数库一样...在浏览器 JavaScript 中,脚本模块的拆分和组合通常使用 HTML 的 script 标签来实现。...换言之,一个 Node.js 文件就是一个模块,这个文件可能是 JavaScript 代码、JSON 或者编译过的 C/C++ 扩展。...如果 require 参数 “./“ 或 “../“ 开头,那么则以相对路径的方式查找模块,这种方式在应用中是最常见的。例如前面的例子中我们用了 require('..../node_modules/express')加载两次,也不会重复加载,因为尽管两次参数不同,解析到的文件却是同一个。
JavaScript 中,基本类型是没有属性和方法的,但为了便于操作基本类型的值,在调用基本类型的属性或方法时 JavaScript 会在后台隐式地将基本类型转换为对象。...因为 JSON 语法是基于 JavaScript 的,很容易将 JSON 和 JavaScript 中的对象弄混,但是应该注意 JSON 和 JavaScript 中的对象不是一回事,JSON 中对象格式更加严格...let 和 const 指令可以声明块级作用域 块级作用域可以在函数中创建,也可以在一个代码块({})中创建 let 和 const 声明的变量不会有变量提升,也不可以重复声明 在循环中比较适合绑定块级作用域...,可以将声明的计数器变量限制在循环内 作用域链 在自己作用域中找不到变量就去父级作用域查找,依次向上级作用域查找,直到访问到全局作用域就终止,这一层层关系就是作用域链 作用域链保证对执行环境有权访问的所有变量和函数的有序访问...JavaScript 和一般的面向对象的对象的语言不同,在 ES6 之前它没有类的概念。
所以 JavaScript 在浏览器中运行时是可以控制浏览器窗口对象和DOM文档对象的。...1.2 系统环境变量 系统环境变量是指在操作系统级别上定义的变量,变量中存储了程序运行时所需要的参数。...在开发环境的操作系统中定义 NODE_ENV 变量,值为 development,在生产环境的操作系统中定义 NODE_ENV 变量,值为 production。...在模块对象中有一个属性 exports,它的值是一个对象,模块内部需要被导出的成员都应该存储在到这个对象中。...在 package.json 文件中, 项目依赖和开发依赖要分别记录,项目依赖被记录在 dependencies 对象中,开发依赖被记录在 devDependencies 中,使开发者可以在不同的环境中下载不同的依赖软件包
javascript 数组以及对象的深拷贝(复制数组或复制对象)的方法 前言 在js中,数组和对象的复制如果使用=号来进行复制,那只是浅拷贝。...如下图演示: 如上,arr的修改,会影响arr2的值,这显然在绝大多数情况下,并不是我们所需要的结果。 因此,数组以及对象的深拷贝就是javascript的一个基本功了。...万能的for循环实现对象的深拷贝 在很多时候,for循环能够解决大问题。...鉴于评论中多人指出,这些是浅拷贝,我本来不想回应,但是提出这个观点的人很多,因此我在这边回应一下。 浅拷贝的概念不重复了,上文中已经说明。文章中的多种方法,均不是浅拷贝,只是是否支持多维数据而已。...而在绝大多数场景下,文中的方法是适用的。 想要简便的支持多维数据的深拷贝,可以直接适用 JSON 方式。或适用 lodash 工具实现。
在 CommonJS 的规范中,每个 JavaScript 文件就是一个独立的模块上下文(module context),在这个上下文中默认创建的属性都是私有的。.../node_modules/express')加载两次,也不会重复加载,因为尽管两次参数不同,解析到的文件却是同一个。...Node.js 中的模块在加载之后是以单例化运行,并且遵循值传递原则:如果是一个对象,就相当于这个对象的引用。...这就是circle.js文件中只有定义在exports对象上的方法才能被外部调用的原因。 以上所描述的模块载入机制均定义在lib/module.js中。...文件查找策略 从文件模块缓存中加载 尽管原生模块与文件模块的优先级不同,但是优先级最高的是从文件模块的缓存中加载已经存在的模块。 从原生模块加载 原生模块的优先级仅次于文件模块缓存的优先级。
如果我是面试官,我认为只有掌握这些重要概念的开发者才能走得更远。 本文对于 JS 开发者来说,是入门级指南而非资深级。不同的人有责任为更艰难的面试做好准备。...闭包是一个返回另一个函数和封装数据的函数。上面的字符生成器就是一个闭包。索引值在多个函数调用间保存。定义的内层函数可以访问外层函数定义的变量。这是不同的作用域。...正如我们之前提到的,this 在不同地方的表现不同。掌握 this 的用法吧。 5....JavaScript 对象有一个特殊属性,可以将任何数据存储为值。这意味着我们可以以值的形式储存列表,另一个对象,函数等。诸如此类。...,其中一些是: Object.prototye.hasOwnProperty 用来查找对象中是否存在指定的属性/键值。
领取专属 10元无门槛券
手把手带您无忧上云