首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

前端面试 【JavaScript】— 什么是BigInt? 谈谈你对它的认识

BigInt是一种新的数据类型,用于当整数值大于Number数据类型支持的范围时。这种数据类型允许我们安全地对大整数执行算术操作,表示高分辨率的时间戳,使用大整数ID等等,而不需要使用库。 2....这导致JS中的Number无法精确表示非常大的整数,它会将非常大的整数四舍五入,确切地说,JS中的 Number类型只能安全地表示-9007199254740991(-(2^53-1))和9007199254740991...((2^53-1)),任何超出此范围的整数值都可能失去精度。...BigInt不支持一元加号运算符,这可能是某些程序可能依赖于 + 始终生成 Number 的不变量,或者抛出异常。另外,更改 + 的行为也会破坏 asm.js代码; 2....浏览器兼容性 Caniuse 前端兼容性工具查询的结果: 主流的浏览器几乎都支持了,但要成为规范,还要很长的路要走。

1.8K10

JavaScript如何工作:内存管理+如何处理4个常见的内存泄漏

过去几年在JavaScript垃圾收集(分代/增量/并发/并行垃圾收集)领域所做的所有改进都是对该算法(标记-清除)的实现改进,而不是对垃圾收集算法本身的改进,也不是它决定对象是否可访问的目标。...##四种常见的内存泄漏 1.全局变量 JavaScript以一种有趣的方式处理未声明的变量: 对于未声明的变量,会在全局范围中创建一个新的变量来对其进行引用。在浏览器中,全局对象是window。...} // Foo自己调用,它指向全局对象(window),而不是未定义。...在这种情况下,为闭包someMethod而创建的作用域可以被unused共享的。unused内部存在一个对originalThing的引用。...从本质上说,在运行过程中创建了一个闭包链表(它的根是以变量theThing的形式存在),并且每个闭包的作用域都间接引用了了一个大数组,这造成了相当大的内存泄漏。

1K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JavaScript注意点:Array.prototype.map

    每个 Javascript 对象要么是真的,要么是假的。当放置在布尔上下文中时,例如 if-else 语句,对象会根据其真实性被视为真或假。那么哪些对象是真的,哪些是假的呢?...函数参数 可以使用任意数量的参数调用 Javascript 中的函数,即使它们不等于声明的函数参数的数量。缺少的参数被视为未定义,额外的参数将被忽略(但存储在类似数组的参数对象中)。...Map 是 Array 原型中的一个方法,它返回将原始数组的每个元素传递给函数的结果的新数组。...我应该能够console.log作为参数传递给map()……对吧? [1, 2, 3, 4, 5].map(console.log); image.png 一些非常奇怪的事情正在发生。...,该符号'7'不存在。

    1.1K10

    一篇文章带你了解JavaScript this关键字

    与其他语言相比,this关键字在JavaScript中的行为略有不同。JavaScript中,this关键字引用其所属的对象。根据使用位置,它具有不同的值。...一、前言 方法中,this关键字引用其所属的对象。 this指的是全局对象在函数中。 this引用全局对象在函数中。 在严格模式下,this是未定义的在事件中。...在浏览器窗口中,全局对象是[object Window]。 2. 函数上下文 在函数内部,this值取决于函数的调用方式。...function myFunc() { "use strict"; return this; } 因此,在严格模式下,如果执行上下文未定义它,则它将保持未定义状态。...五、总结 本文基于JavaScript 基础,介绍了this 关键字,与其他语言相比,this关键字在JavaScript中的行为略有不同,对this ,包括(全局,函数,函数绑定)常见的用法进行了详细的讲解

    58740

    聊一聊 5 个关于JavaScript 中的 this 知识点

    翻译 | 杨小爱 this 关键字是 JavaScript 中最令人困惑的部分之一,本文试图通过介绍有关它的五个重要事项来阐明其目的和用法。...1、它允许访问同一对象上的其他属性 在 JavaScript 中,函数可以是独立的单元,但它们也可以用作对象的值。 考虑下一个对象。...logMessage 函数如何访问同一对象上的其他成员? 这是这个伪参数变得有用的地方,它允许访问同一对象上的其他成员。...基本上,这就是在 JavaScript 中使用 this 关键字的原因,它允许访问其他拥有或继承的属性。 这种行为只有一个条件,函数应该作为方法调用,而不是作为函数调用。...即使在自执行函数返回后,它也可以访问此变量。 现在它不关心我们是否将 logMessage 作为函数或作为方法调用,它总是引用正确的 msg 变量。

    61830

    分享近百道JavaScript 基础面试题,帮助你巩固JavaScript 基础知识

    JavaScript 中的数据类型包括字符串、数字、布尔值、对象、未定义和空值。 3、null和undefined有什么区别?...null 表示有意不存在任何对象值,而 undefined 表示不存在值或未初始化的变量。 4. 如何在 JavaScript 中声明变量?...闭包是一个函数,即使在外部函数完成执行后,它仍保留从其外部范围访问变量的功能。 10. 如何在 JavaScript 中创建对象?...JavaScript 中localStorage 对象的作用是什么? localStorage 对象允许你在浏览器的存储中存储键值对,即使在浏览器关闭后仍然存在。 21....闭包是函数和声明该函数的词法环境的组合。它允许函数保留对其外部作用域中变量的访问,即使在外部函数执行完毕后也是如此。 35. JavaScript 中 reduce() 方法的用途是什么?

    34810

    前端测试题:(解析)关于WEB中造成内存泄漏的说法,下面错误的是?

    当创建一个对象时,JavaScript 会自动为该对象分配适当的内存。从这一刻起,垃圾回收器就会不断对该对象进行评估,以查看它是否仍是有效的对象。...常见 JavaScript 内存泄露 1. 意外的全局变量 JavaScript 处理未定义变量的方式比较宽松:未定义的变量会在全局对象创建一个新变量。在浏览器中,全局对象是 window 。...假如你想快速更新表格的几行内容,把每一行 DOM 存成字典(JSON 键值对)或者数组很有意义。此时,同样的 DOM 元素存在两个引用:一个在 DOM 树中,另一个在字典中。...4:闭包 闭包是 JavaScript 开发的一个关键方面:匿名函数可以访问父级作用域的变量 闭包的作用域一旦创建,它们有同样的父级作用域,作用域是共享的 它引用的变量迫使它保留在内存中(防止被回收)每一个闭包作用域携带一个指向大数组的间接的引用...答案:错误的是 B. 如果一个对象的引用数量为 0,或对该对象的惟一引用是循环的,那么该对象的内存不可回收。

    1K20

    JavaScript 内存泄露的4种方式及如何避免

    JavaScript 内存泄露 垃圾回收语言的内存泄露主因是不需要的引用。理解它之前,还需了解垃圾回收语言如何辨别内存的可达与不可达。...JavaScript 中,“window” 对象是一个全局变量,被当作 root 。...window 对象总是存在,因此垃圾回收器可以检查它和它的所有子对象是否存在(即不是垃圾); 所有的 roots 被检查和标记为激活(即不是垃圾)。所有的子对象也被递归地检查。...三种类型的常见 JavaScript 内存泄露 1:意外的全局变量 JavaScript 处理未定义变量的方式比较宽松:未定义的变量会在全局对象创建一个新变量。...如今,即使没有明确移除它们,一旦观察者对象变成不可达,大部分浏览器是可以回收观察者处理函数的。 观察者代码示例: ?

    4.8K52

    JavaScript 编程精解 中文第三版 八、Bug 和错误

    即使这样,它也允许你做一些不会报错的无意义的事情,比如计算true *'monkey'。 JavaScript 有一些报错的事情。 编写不符合语言语法的程序会立即使计算机报错。...JavaScript 只在实际运行程序时考虑类型,即使经常尝试将值隐式转换为它预期的类型,所以它没有多大帮助。 尽管如此,类型为讨论程序提供了一个有用的框架。...这意味着当代码有几个副作用时,即使它的“常规”控制流看起来像它们总是会发生,但异常可能会阻止其中一些发生。 这是一些非常糟糕的银行代码。...JavaScript(很明显的疏漏)并未对选择性捕获异常提供良好的支持,要不捕获所有异常,要不什么都不捕获。这让你很容易假设,你得到的异常就是你在写catch时所考虑的异常。 但它也可能不是。...如果又输入了不正确的值,那么系统会向用户准确报告错误——“绑定未定义”。 断言 断言(assertions)是程序内部的检查,用于验证某个东西是它应该是的方式。

    1.2K100

    JavaScript——对象的属性

    在JavaScript中,所有的对象都是一组属性的集合,属性可以是数值,字符串等原始类型,也可以是函数,或者是其他对象。 属性的类型 JavaScript中的属性有两种类型:数据属性和访问器属性。...数据属性 数据属性可以看成是直接封装了一个内部变量,内部变量中存放了该属性的值。当对某个对象尚未存在的属性进行赋值时,该属性将会作为数据属性被自动创建。...里对象的属性是以键/值对的形式存在的,这里的「键」不限于字符串类型,也可以是数值或其他对象。...事实上,JavaScript中的数组(Array),本质上也是一个键/值对的集合,数值类型的自然索引也是作为属性名(键)存在的。...修改已有数据属性的值(即使该属性可写) 但可以 修改已有访问器属性的值(如果有set方法) 相关方法汇总 属性的相关方法都是以Object的静态方法或原型方法的形式提供的,下面简单的做一下汇总: 属性定义相关

    2.4K30

    译文:开发人员面临的 10个最常见的JavaScript 问题

    传统的,与旧浏览器兼容的解决方案是简单地将你对this的引用保存在变量中,然后可以通过闭包继承,例如: 或者,在较新的浏览器中,可以使用bind()方法传入正确的引用: JavaScript 问题#2...内存泄漏示例1:悬空对已失效对象的引用 请考虑以下代码: 如果运行上述代码并监视内存使用情况,你会发现内存严重泄漏,每秒泄漏整整一兆字节!即使是手动垃圾回收器(GC)也无济于事。...每秒钟,当我们调用replaceThing时,它都会保留对theThing中priorThing对象的引用。...所以现在我们得到了: JavaScript 问题#8:创建对实例方法的错误引用 让我们定义一个简单的对象,并创建它的一个实例,如下所示: 现在,为了方便起见,让我们创建一个对whoAmI方法的引用,...如果没有严格模式,对空或未定义的this值的引用会自动强制到全局。这可能会导致许多令人沮丧的错误。在严格模式下,引用this值为null或未定义会引发错误。 ·禁止重复的属性名称或参数值。

    1.3K20

    学习JavaScript:逻辑与、或、非运算

    问题是我们无法确定一个 人对象是不是含有 工作属性,所以我们可以运用 或运算和短路求值来更方便地解决这个问题: var person = { name: 'Jack', age: 34 } console.log...(person.job || 'unemployed'); // 打印出'unemployed' 这个例子中我们对 人.工作数据和一个默认字符串 '无业'数据进行或运算,再用控制台命令 console.log...这里 人.工作属性并不存在,所以它的值求出来是 未定义。 未定义这个值等同于假,因此JavaScript会继续去求 或符号另一边的数据值,最后结果会和第二个值一致。...**// a值是未定义 (等同于假)** var d = 4; **// b的值是一个数字 (这里不等同于假)** var e = 'five'; **// 上一步已经短路求值,所以到不了这一步**...---- 往期精选文章 使用虚拟dom和JavaScript构建完全响应式的UI框架 扩展 Vue 组件 使用Three.js制作酷炫无比的无穷隧道特效 一个治愈JavaScript疲劳的学习计划 全栈工程师技能大全

    6.3K20

    JavaScript中的后置声明是什么?

    提示: 可能跟同学们理解的不太一样。 ? 刚开始接触JavaScript时,大家可能都碰到过后置声明这个词。学习这个词的定义之前,让我们先看一个例子。...实际上是程序在编译阶段把你的函数声明和变量声明加到了内存中去。 在上面的例子中,程序编译阶段我们的函数声明已经加到内存中去了,所以即使源代码还没有运行到我们输入的声明语句,仍然可以调用这个函数。...要记住,如果一个变量声明了却没有初始化值,那它的值就会自动定为 未定义。那我们再回过头来看看一开始的例子。...这样不会产生不想要的结果。我们声明变量时都要尽量初始化值,这可以使代码更清晰,也可以尽量避免 未定义的变量。...---- 往期精选文章 使用虚拟dom和JavaScript构建完全响应式的UI框架 扩展 Vue 组件 使用Three.js制作酷炫无比的无穷隧道特效 一个治愈JavaScript疲劳的学习计划 全栈工程师技能大全

    1.3K10

    一文带你彻底搞懂JavaScript原型链

    是因为它借鉴了C语言的基本语法和Self语言的使用基于原型(prototype)的继承机制。 所以我们也经常可以看到JavaScript被描述为一种基于原型的语言,每个对象都有一个原型对象。...在JavaScript中,检测对象类型时,强烈建议使用Object.prototype.toString方法。typeof的一些返回值在标准文档中并未定义,因此不同的引擎实现可能不同。...如果不存在那么就去原型对象上去找,存在就直接使用,如果没有就顺着原型链一直往上查找,找到即使用,找不到就重复该过程直到原型链的顶端,如果还没有找到相应的属性或方法,就返回undefined,报错。...console.log(Object instanceof Function); //true 注意:不要错误的认为instanceof检查的是该实例对象是否从当前构造函数实例化创建的,其实它检查的是实例对象是否从当前指定构造函数的原型对象继承属性...6 最佳的组合继承方案 思路 1.使用原型链实现对原型属性和方法的继承 2.通过伪造(冒充)构造函数来实现对实例成员的继承,并且解决了父构造函数传参问题 // 1 提供超类型|父类型 function

    37021

    变量与数据类型:从基础到进阶

    这意味着即使变量是在块级代码(如if语句、for循环等)中声明的,它仍然会影响到整个函数范围内的代码。 变量提升:使用var声明的变量会被提升到函数或全局作用域的顶部,但赋值操作仍会保持原来的顺序。...它提供了块级作用域,解决了var的许多问题。...let isActive = true; let isCompleted = false; Undefined(未定义) 当声明一个变量但没有赋值时,它的值会默认为undefined。...这意味着当你将一个引用类型的值赋给另一个变量时,它们指向的是同一个内存位置。 Object(对象) 对象是无序的键值对集合,可以存储不同类型的值。创建对象时通常使用大括号 {}。...数据类型:JavaScript的原始类型包括字符串、数字、布尔值、未定义、空值、符号和大整数,而引用类型则包括对象、数组和函数。理解这两类类型的区别,可以帮助你更好地管理数据。

    7600

    使用ES6解构赋值和默认参数特性简化JavaScript代码

    引言在开发过程中,我们经常会遇到需要优化和简化代码的情况。今天,我将分享一个简单的代码优化示例,它涉及到JavaScript的对象解构和默认参数。...如果 options.course_id 存在,则将其值赋给 course_id 变量;如果不存在,则将 course_id 初始化为0。...问题尽管这段代码能够正常工作,但它的可读性并不高,且包含了一个显式的条件判断。在JavaScript中,还有更简洁的方式来实现相同的功能。...默认参数:course_id = 0 这部分代码表示,如果 options 对象不存在或者 options.course_id 属性未定义,则将 course_id 的值默认为0。...可读性:新的写法更直观,易于理解。安全性:通过提供默认值,避免了潜在的运行时错误。结论通过学习和实践,我意识到即使是最简单的代码段也可以通过使用现代JavaScript的特性来优化。

    11010
    领券