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

必知必会JavaScript前端面试题篇(二),不看后悔!

,复制对象在内存中指针,不是对象本身,修改一方,另一方也会发生改变 • 原始数据类型 -> 栈 -> Undefined、Null、Boolean、Number、String • 引用数据类型 -...3. undefined 与 null 区别? • undefined: 表示未定义,可能有值也可能没值,表示还没有赋值 • null: 代表空值,空引用 4. 为什么 0.1 + 0.2 !...let n1 = 0.1, n2 = 0.2; console.log(n1 + n2); // 0.30000000000000004 • 这里得到不是想要结果,要想等于 0.3,就要把它进行转化...为什么函数 arguments 参数是类数组不是数组?如何遍历类数组?...• 原因: • arguments 是一个对象,他属性是从 0 开始依次递增数字,还有 callee: 通过它可以调用函数自身 和 length 等属性,与数组类似,但是没有数组常见一些方法,例如

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

算法:插入排序详解--为什么从第二开始,不是第一

PS:对于插入排序这个算法,我们想要看清他就要从它应用场景,概念,用法等去了解它,实现代码就那么几行,但有时还真是不好理解,比如说为什么从第二开始,不是从第一开始呢,下面我们来举个例子看一下。...,从而得到一个新、个数加一有序数据,算法适用于少量数据排序,时间复杂度为O(n^2) 1:插入排序 /** * 从第二开始,第一默认为有序 * 1:把第二数据暂存...* * * 很多人估计不理解为什么从第二开始,不是从第一, * 这里稍微做一下解释,插入排序就是将一个数据插入到已经排好序有序数据中...,从而得到一个新、个数加一有序数据,算法适用于少量数据排序, * 我们对于一个数组,不知道哪里是排序,可能是前三条,也可能不是有序,我们这时就要假设一段已经排好序数组,我们直接取前三的话..., * 不一定是排序, 我们取前一的话,就一个数据肯定是排序,所以就从第二开始,默认第一已经排序好了。

1.2K60

JavaScript 入门基础 - 变量 数据类型(二)

false 如果不是数字返回是true。...表示一个变量赋予了一个空值,undefined则表示该变量没有被赋值。...1 2 3 console.log(dog[2]); // 哈士奇 2.7.4 遍历数组 数组每一可以通过 “数组名[索引号]” 方式一提取出来,但对数组元素较多数组我们用...注意:不要直接给数组名赋值,否则里面的数组元素都会被覆盖 2.7.6 冒泡排序 冒泡排序是一种算法,就是把一系列数据按照一定顺序进行排列显示(从小到大或者从大到小)例如把数组 [4, 3, 2, 1...]从小到大排序输出 1, 2, 3, 4 ,它重复地走访要排序数列,一次比较两个元素,如果顺序错误就交换位置,直到没有需要交换地方,表示该数组已经排序完成。

3.8K40

你可能不知道字符比较中“秘密”

下面就是这个问题解答。原文是英文,已经翻译成中文(英语水平有限,错漏难免,最好还是看原文哈)。...这个库为每个已经辨识字符定义了一个权重值(Weight),并以这个权重值进行字符比较。然而,并不是所有代码点(code point)都已经在排序库中进行了定义。...这确实导致了一些令人感觉困惑行为。看看下面的例子。...同理,如果你创建一张未定义字符为表名表,然后尝试创建另一个未定义字符为表名表,第二张表会因为表名重复创建失败,即使这两个未定义字符代码点是不同。...在二进制排序规则中,比较完全是根据代码点,不是语言规则,因此也没有所谓已定义和未定义概念了。(完) 读完这篇博客,你应该明白怎么回事了吧。

1K70

面试必备:30 个 Java 集合面试问题及答案

Java集合框架为Java编程语言基础,也是Java面试中很重要一个知识点。这里,列出了一些关于Java集合重要问题和答案。 1.Java集合框架是什么?说出一些集合框架优点?...(1)HashMap允许key和value为null,HashTable不允许。 (2)HashTable是同步HashMap不是。...以下是ArrayList和Vector不同点。 (1)Vector是同步ArrayList不是。...Comparable和Comparator接口被用来对对象集合或者数组进行排序。Comparable接口被用来提供对象自然排序,我们可以使用它来提供基于单个逻辑排序。...Collections内部使用数组排序方法,所有它们两者都有相同性能,只是Collections需要花时间将列表转换为数组

95920

百度不问我项目,全程基础拷打,真扎心!

这是因为在使用delete操作符释放一个指向派生类对象基类指针时,如果基类析构函数不是虚函数,那么只会调用基类析构函数,不会调用派生类析构函数,这样就会导致内存泄漏和未定义行为问题。...如果遇到内存泄漏这种问题,你一般是怎么去解决 打断点定位然后做处理 后来思考对方应该是想让回答这种处理措施⬇️ 在程序中加入必要错误处理代码,避免程序因为异常情况导致内存泄漏。...将小于等于基准元素元素移动到数组左边,大于基准元素元素移动到数组右边,这个过程称为划分。 递归地对划分后左右两个子序列进行排序。...但是仔细想想还可以继续回答⬇️ 在实际实现中,sort函数还有一些优化,例如: 当排序元素个数小于一定阈值时,使用插入排序算法。 当出现大量重复元素时,使用三向划分快速排序算法。...一致性(Consistency):事务执行前后数据库状态是一致,即数据库中约束和规则都得到了保持。 隔离性(Isolation):多个事务并发执行时,相互之间不会影响彼此执行结果。

20810

面试必备:30 个 Java 集合面试问题及答案

Java集合框架为Java编程语言基础,也是Java面试中很重要一个知识点。这里,列出了一些关于Java集合重要问题和答案。 1.Java集合框架是什么?说出一些集合框架优点?...(1)HashMap允许key和value为null,HashTable不允许。 (2)HashTable是同步HashMap不是。...以下是ArrayList和Vector不同点。 (1)Vector是同步ArrayList不是。...Comparable和Comparator接口被用来对对象集合或者数组进行排序。Comparable接口被用来提供对象自然排序,我们可以使用它来提供基于单个逻辑排序。...Collections内部使用数组排序方法,所有它们两者都有相同性能,只是Collections需要花时间将列表转换为数组

63720

你可能从未使用过11+个JavaScript特性

第二个结果就是返回给调用者内容。 对于三元运算符,它也很有用,因为与短lambda语法相同,它仅接受表达式不是语句。 二、in in 是用于检查对象中属性是否存在关键字。...const o = { prop: 1 } console.log("prop" in o) // true 看,in 可以独立使用,不是在 for..in 中。...如果增加 length 属性,则 JS 引擎将添加元素(未定义元素)以使数组元素数量达到 length 属性值。...曾经读到过 undefined 之前可能会被赋予另一个值,而这会伪造其语义。 因此,使用 void 运算符可确保你得到一个真正 undefined 。 也用于最小化目的。...这会将通过 Object.prototype 可访问 obj 所有属性复制到 obj2 。 这就是为什么我们可以在 obj2 上调用方法不会在没有定义情况下得到错误原因。

98710

js算法初窥01(排序算法01-冒泡、选择、插入)

或许你不懂算法,对排序算法一无所知,但是你一定用过一些第三方库api来一键排序,那么,在你享受便捷同时,你是否想过它底层是如何实现?这样算法实现方式是不是最好?...就算以后要用其它语言来实现这些算法,也不过就是一些语言特性上差别罢了。   我们会专门写一个数组类,并在其中加入各种排序算法。那么,我们先开始搭一个简单架子。...// 这里要刨根问底一下,为什么外层循环(i)循环数组元素长度,内层(j)是比数组长度少1循环次数?   ...也就是说,第一个元素和第二个元素比较大小来确定这两个元素位置。那么这样,单纯就数组元素前两来说,他们是排好序了。...简单来说,我们可以认为在排序数组中有一个已排序数组,我们依次用后面的元素与子数组元素进行比较,以确定后面的元素应该插入到子数组什么位置。最后,我们就会得到一个完全排序数组了。

31010

Reddit 观察 | 以排序为案例,对 CCPPRust 安全与性能相关性研究

不是所有的排序算法都必须使用严格弱排序比较函数,一些排序算法可以使用部分排序(partial ordering)比较函数,这时不需要满足严格自反性、反对称性等。...Rust 实现 Rust标准库排序接口在许多情况下避免了这个问题,它要求用户定义比较函数返回 Ordering 类型不是bool。...如果比较函数逻辑错误,可能会产生一些随机数字。 E 选项排序永远运行不停,算法无法终止。 F 选项产生未定义行为(UB)。由于违反排序算法前提,编译器优化可能会造成意想不到后果。...不明白为什么不能直接从 Rust 转换到 C++,同时满足他们要求。作者Danila Kutenin在他们博客文章中甚至提到了 Rust 实现,所以我认为他们是知道。...就个人而言,在工作中花了几天时间调试一些以非常奇怪方式出错代码,原因是在比较函数中意外地写成了 <= 不是 < ,影响了完全不同地方逻辑。

30320

50道JavaScript详解面试题,你需要了解一下

答案是输出为10,因为将对象传递给函数时对象相似,仅传递其值,不传递对内存位置实际引用。这就是为什么更改仅影响函数范围内参数原因。 3、控制台输出是什么?...在Line2中,我们使用===运算符来检查两个字符串基元不是字符串对象,因此我们得到True。 5、控制台输出是什么,为什么? 与之前问题类似,我们比较了两个唯一对象。...instanceof需要TypeScript,typeof则不需要。 typeof在右侧使用变量名称, instanceof在左侧和右侧使用值,不是。...但是,如今,现代前端框架和库使此操作变得不必要了。 18、以下哪一不是内置JS错误类型? 答案是E。 19、以下哪一不是有效Promise方法? 答案是A。...event.currentTarget随着事件起泡变化,event.target保持不变。 41、Array sort()方法默认排序是什么? 按字符值从最小到最大。 42、什么是比赛条件?

3.5K40

7种你应该知道JavaScript常见错误

接下来,我们尝试使数组包含90**99 == 2.9512665430652753e+193元素。 这个数字超出了大小数组可以增长范围。...ReferenceError 当对变量/引用被破坏或不存在时,将引发此错误。也就是说,变量/不存在。...cat变量存在,dog变量不存在。 cat将返回“ cat”,dog会引发ReferenceError,因为在环境记录中找不到名为dog变量。...decodeURI("%") ^ URIError: URI malformed encodeURI,获取URI未编码版本。“%”不是正确URI,因此引发了URIError。...所以我们在这篇文章中列出了它们,并提供了一些示例来简要来介绍了它们是如何发生。 最后,希望本文一些浅见能为你写出更好代码提供一些帮助,谢谢!

2.6K10

从 V8 源码看 JS 数组排序诡异问题

前几天一个朋友在微信里面问我一个关于 JS 数组排序问题。...,数组每一都是一个拥有 value 作为 key 对象,值为数字或者 undefined。...备注:ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守。 翻译成编程术语就是:sort 排序算法是不稳定排序。 其实我们最疑惑问题上,上面两行代码为什么会输出不同结果。...V8 为了性能考虑,当数组元素个数少于 10 个时,使用插入排序;大于 10 个时使用快速排序。 后面还定义了快速排序函数和其它几个函数,就不一一列出了。...而在第一种写法时,数组每一都是一个 Object,然后最 Object 调用 x.value - y.value 进行计算,当 undefined 参与运算时比较结果是 NaN。

62230

「数据结构与算法Javascript描述」十大排序算法

之所以叫冒泡排序是因为使用这种排序算法排序时,数据值会像气泡一样从数组一端漂 浮到另一端。假设正在将一组数字按照升序排列,较大值会浮动到数组右侧,较小值则会浮动到数组左侧。...接着,迭代数组来给第i找到正确位置。注意,算法是从第二个位置(索引1)不是0位置开始(我们认为第一排序了)。...最简单一种是选择数组第一(最左)。然而,研究表明对于几乎已排序数组,这不是一个好选择,它将导致该算法最差表现。另外一种方式是随机选择一个数组项或是选择中间。...有一些公开定义间隔序列,使用它们会得到不同结果。...当然,年龄有重复时需要特殊处理(保证稳定性),这就是为什么最后要反向填充目标数组,以及将每个数字统计减去 1 原因。

94620

读」PL 观点 | 未定义行为有利一面

常见于翻译器对源代码存在某些假设,执行时这些假设不成立情况。 一些编程语言中,某些情况下存在未定义行为,以C和C++最为著名。...具体到 C/C++ 中,编译器可以选择性地给出相应诊断信息,但没有对此强制要求:针对未定义行为,语言实现作出任何反应都是正确,类似于数字逻辑中无关。...上面代码中,包含一些隐藏成本:编译器会插入一个边界检查,以确保访问数据不会超过数据所指向数组大小。 但是作为程序员,我们知道这个检查完全没有必要。...通过 unchecked_add函数,来告诉程序员,使用它可以在不可能有溢出场景下,来省略一些检查成本。...这个术语关注是负面情况,作为程序员或编译器作者,我们真正关心是程序没有未定义行为。我们能摆脱这种双重否定吗?也许我们应该谈论 "确保定义良好行为 "不是 "避免未定义行为"。

1.6K30

算法可视化:把难懂代码画进梵高星空

它让人想起美丽罗马马赛克: ? 现在,你已经看到了一些例子,让我们简要地思考一下为什么要把算法可视化。 ▼娱乐 发现可视化算法有无穷魅力,甚至令人着迷。特别是在涉及随机性时。...发现看到它,不是熟记小容易忘记细节代码,更容易直观地记住一个算法。 洗牌 洗牌是随机重新排列一组元素过程。例如,你可以在打牌之前洗牌。...一个特别聪明变化是Yaroslavskiy双基准快速排序,它将数组分为三个部分,不是两个。这是Java和Dart中默认排序算法。...这个额外空间用于归并排序数组,把来自子数组每对元素组合在一起,同时保持顺序。由于归并排序运行副本不是交换,因此我们必须相应地修改动画(或有误导读者风险)。 归并排序自下而上进行。...因为归并排序数组上执行重复遍历不是像快速排序那样递归,并且因为每次遍历使排序数组大小加倍,不考虑输入,所以更容易设计成静态展示。我们只需在每次合并后显示数组状态。 ?

1.5K40

面试必备:30 个 Java 集合面试问题及答案

题 图:pexels 预 计 阅 读 时 间:10分钟 Java集合框架为Java编程语言基础,也是Java面试中很重要一个知识点。这里,列出了一些关于Java集合重要问题和答案。...(1)HashMap允许key和value为null,HashTable不允许。 (2)HashTable是同步HashMap不是。...以下是ArrayList和Vector不同点。 (1)Vector是同步ArrayList不是。...Comparable和Comparator接口被用来对对象集合或者数组进行排序。Comparable接口被用来提供对象自然排序,我们可以使用它来提供基于单个逻辑排序。...Collections内部使用数组排序方法,所有它们两者都有相同性能,只是Collections需要花时间将列表转换为数组

46320

4个Javascript 中 for 循环

2.2、 for-in真相 for-in 循环遍历对象属性,不是数组索引。所以for-in遍历对象不限于数组,也可以遍历对象。...Javascript 中数组与大多数其他语言中数组不同。首先,Javascript 中数组在内存中不是连续。 其次,Array 索引不是指偏移量。...同时,需要注意是,这里输出索引值,即“0”、“1”、“2”不是Number类型,而是String类型,因为它们是作为属性输出不是索引,这是否意味着我们只能输出数组内容,不能向我们 Array...,那些已经被删除(使用delete 方法等)或从未赋值将被跳过(不包括那些未定义) 或空值)。...以后有时间写一篇关于它文章。

45040

C语言不是最好,却是最爱~

正文 以下为译文: 虽然 C 语言并不是所学第一门语言,也不是最后一门语言,但是仍然非常喜欢 C,当需要写程序时,第一选择还是 C。...同时,也会关注现代编程语言及其发展趋势,而且还使用 Rust 编写了自己业务爱好项目。那么,为什么没有抛弃 C 选择其他语言呢?对于 C++看法又是如何呢?...1、为什么说C不是最好语言? 首先,这个世上没有最好编程语言。每种语言都有独特优势以及适用情况,所以尽管你可以在 Excel 中编写光线追踪程序,但最好还是使用其他语言。...最后,觉得 C++出现反而给 C 带来了约束以及不良影响。不是在讨论 C/C++,也不是指 C 与 C++共通之处,讨论是耦合对标准和编译器都有不良影响。...当然指的是“未定义行为”以及编译器处理方式。这已成为一大毒瘤(只要你代码依赖于二进制补码算术,就会被认定具有未定义行为,编译器会抛弃整块代码)。

11510
领券