🎶 Sym - 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台

📕 思源笔记 - 一款桌面端笔记应用,支持 Windows、Mac 和 Linux

🎸 Solo - B3log 分布式社区的博客端节点,欢迎加入下一代社区网络

♏ Vditor - 一款浏览器端的 Markdown 编辑器

0 篇文章

原型继承和经典继承有什么区别?

2019-01-31 回答在原型继承中,对象实例直接从其他对象继承。通常使用工厂模式或 Object.create()来创建对象实例。在经典继承中,对象实例从类中继承他们的属性和函数。通常使用构造函数和 new 关键字来创建对象实例。加分回答代码中原型链过长时,应将其分解,以避免出现性能问题。原生原型不应该被扩展,除非为了与新的 JavaScript 特性兼容。在 ES6 中引入的 class 关键字只是语法糖,他仍然

什么是 Promises?

2019-01-30 回答 Promise 对象在异步操作后可对其完成或失败进行回调,并展示其结果值。以下代码片断是一个 Promise 的示例:100ms 后使用标准输出流打印出'result'字符串。此外请注意 catch,他可以用于错误处理。Promise 是链式的。newPromise((resolve,reject)=>{setTimeout(()=>{resolve("result")},100)}).

JavaScript 通过值还是引用传递?

2019-01-29 回答 JavaScript 是通过值进行传递的。然而对于对象而言,值是对象的引用。加分回答在值传递中,传递给函数的参数是函数被调用时所传实参的拷贝。在传值调用中实际参数被求值,其值被绑定到函数中对应的变量上(通常是把值复制到新内存区域)。在引用传递中,传递给函数的是他的实际参数的隐式引用而不是实参的拷贝。通常函数能够修改这些参数(比如赋值),而且改变对于调用者是可见的。返回总目录每天

列举几种创建对象的方法,并说明每种方法的使用场景

2019-01-28 回答对象字面量通常用于存储一次性数据。constperson={name:"John",age:50,birthday(){this.age++}}person.birthday()console.log(person.age)//51 构造函数通常用于为一个对象创建多个实例的场景,每个实例都不会受到该对象的其他实例的影响,他们有自己独立的数据。new 关键字必须位于构造函数之前,否

参数和 arguments 有什么区别

2019-01-27 回答参数是函数定义时的变量名,而 arguments 的值是函数调用时赋予的。functionmyFunction(parameter1,parameter2){console.log(arguments[0])//"argument1"}myFunction("argument1","argument2")加分回答 arguments 是一个类似数组的对象,他包含了函数调用时参数的有关

`null` 和 `undefined` 有什么区别?

2019-01-26 回答在 JavaScript 中有两个值表示无——undefined 和 null。他们之间根本的区别在于 null 是显式的,而 undefined 是隐式的。当一个属性不存在或一个变量没有被赋值时,他们的值为 undefined。把 null 赋给一个变量时,就显式的表明这个变量“无值”。实际上,当明确知道没有对象或不应该有值时就使用 null,否则就使用 undefined。加分回答 typeof 结果

解释 MIME type 及其作用

2019-01-25 回答 MIME 是多用途 Internet 邮件扩展(Multi-purposeInternetMailExtensions)的首字母缩写。他使用标准化的方式来表示网络之间传输的文档类型及格式。完整格式可查看 MediaTypes。加分回答 MIMEtype 由两部分组成:斜杠(/)分隔的类型和子类型,中间无空格。例如:MicrosoftWord 文件的 MIMEtype 是 application/

使用星号替换字符串且显示后四位

2019-01-24 题目/**请按要求实现 `mask` 函数:以下代码执行时,需返回正确结果且运行过程中无异常*/mask('123456789')//*****6789mask('123456789abcd')//*********abcd 回答有很多种方法可以解决这个问题,以下只是其中之一。通过给 slice()传入-4 作为参数,我们可获取字符串的后 4 位。然后再使用 String.prototype.p

词法作用域和动态作用域的区别?

2019-01-23 回答词法作用域指的是使用函数位置来确定变量值。于此相对的是动态作用域,他使用函数调用的位置来确定变量值。加分回答词法作用语也被成为静态作用域。在闭包中,JavaScript 依旧遵循词法作用域。大多数语言都使用词法范围,因为这样的源代码更加容易理解。JavaScript 实际上没有动态作用域,但 this 机制却和动态作用域类似:关注点都在于函数是如何被调用的。下列代码中,使用词法作用域

什么是内联条件表达式?

2019-01-22 回答你可以使用 if 语句或三元表达式来根据条件获取对应的结果。除了这些方法之外,你还可以在 JSX 中嵌入任意表达式,如:花括号中使用逻辑运算符&&或三元表达式。(<div><h1>Hello!{isLoggedIn?'Vanessa':'User'}</h1>{unreadMessages.length>0&&<h2>Youhave{unreadMessages.length}unr

立即执行匿名函数的原因是什么?

2019-01-21 回答这种技术在 JavaScript 库中非常常见,他可以围绕文件中的上下文创建一个闭包环境,为这个文件创建私有的命名空间。这样就可以避免不同的 JavaScript 模块和库在命名上产生冲突。函数被立即调用,就可以将函数的返回值赋给命名空间(库名)。constmyLibrary=(function(){varprivateVariable=2return{publicMethod:()

提升在 JavaScript 中是如何工作的?

2019-01-20 回答提升是 JavaScript 的一种机制,在编译阶段任意位置的变量和函数声明都会被放入内存中。也就是说不论函数和变量在何处被声明,他们的作用域是全局的还是局部的,他们的声明都会移动到作用域的顶部。这里需要注意的是,他们的初始化并不会被提升。因此如下等同的两段代码片断都将输出 undefinedconsole.log(hoist)//undefinedvarhoist="value"

变量提升

2019-01-19 问题下列代码会输出什么?varfoo=1varfoobar=()=>{console.log(foo)varfoo=2}foobar()回答由于变量提升(Hoisting),局部变量 foo 将会在调用 console.log 方法之前进行声明。也就是说,作为参数传递给 console.log()的局部变量 foo 替代了在函数外部声明的全局变量。但是变量初始化(赋值)并不会被提升,因此输出为

数组方法 `map()` 和 `forEach()` 有什么区别?

2019-01-18 回答这两种方法都是对数组中的元素进行迭代。map()通过每个元素的回调函数将其映射到新的元素上,最终返回一个新的数组。forEach()虽然也为每一个元素准备了回调函数,但却不返回新的数组。forEach()在每一次迭代的使用中都会产生副作用,因此 map()是编程技术中常用的方法。加分回答如果你需要迭代一个数组,使其本身发生变化且不需要返回一个新数组时,可以使用 forEach()

`0.1 + 0.2 === 0.3` 的计算结果是什么?

2019-01-17 回答他的计算结果为 false,因为 JavaScript 中的 Math 遵循 IEEE754 标准使用了 64 位的浮点数。简言之:计算机使用二进制来存储小数,而大部分小数转换成二进制后都是无限循环的值,因此需要进行取舍,这样一来在进行十进制计算时就会导致精度丢失。0.1+0.2//0.30000000000000004 要解决精度问题,可以通过以下函数对误差进行忽略:constapproxEq

生成一个包含 n 项的斐波那契数列

2019-01-16 回答初始化一个长度为 n 的空数组。使用 Array.prototype.reduce()将计算结果添加到数组中。计算结果为最后两个值相加之和,应注意前两个值除外。constfibonacci=n=>[...Array(n)].reduce((acc,val,i)=>acc.concat(i>1?acc[i-1]+acc[i-2]:i),[])返回总目录每天 30 秒

JavaScript 中的真值和假值是什么?

2019-01-15 回答一个值是真值(truthy)还是假值(falsy)具体取决于他在布尔上下文中的计算方式。假值意味着布尔上下文中转换后为假的值,真值意味着布尔上下文中转换后为真的值。本质上,当他们在执行某些操作时他们就会被强制转换为 true 或 false。JavaScript 中有以下 6 个假值:falseundefinednull"":空字符串 NaN0:包含-0 和 +0 除上面以外的其他所有值都被认为

JavaScript 的表达式和语句有什么区别?

2019-01-14 回答 JavaScript 有两种主要的语法:表达式和语句。还有一种是表达式语句,即在语句中写入表达式。可表述为:表达式:产生一个值语句:执行一个操作表达式语句:产生一个值并执行一个操作一般的经验法则:如果他有输出值或者可以把他赋值给一个变量,那么他就是一个表达式。否则就是一个声明。语句 letx=0functiondeclaration(){}if(true){}语句作为指令可以显示

介绍事件委托及其优点,并说明如何使用?

2019-01-13 回答事件委托是将事件委托给单个共同祖先的技术,这和事件冒泡相关。事件能在 DOM 树上进行冒泡是由于每一个祖先元素依次向上直至根节点所执行的回调都可能被监听到。DOM 事件提供了关于元素的有用信息:通过 Event.target 可以获取触发事件的元素。这允许父元素像目标元素监听事件一样去处理事件,而不是去监听处理父元素的所有子元素或单独处理父元素本身。事件委托有如下优点:不仅能提高性能,

CORS 是什么?

2019-01-12 回答 CORS(Cross-OriginResourceSharing)跨域资源共享使用额外的 HTTP 头来告诉浏览器,此站点已被授权可以访问来自服务器指定的不同域的资源。从 http://mydomain.comWeb 应用程序中使用 Ajax 请求 http://yourdomain.com 资源就是一个跨域请求的例子。出于安全考虑,浏览器会阻止 JavaScript 发起的 HTTP 跨源请求。X