14万字 | 400 多道 JavaScript 面试题  有答案 (第二部分 101-200题)_前端

编号 问题
1 在 JavaScript 中创建对象的可行方法有哪些?
2 什么是原型链?
3 call、apply、bind有什么区别?
4 什么是 JSON 及其常见操作?
5 数组slice()方法的目的是什么?
6 数组splice()方法的目的是什么?
7 slice()和splice()有什么区别?
8 你如何比较 Object 和 Map
9 == 和 === 运算符有什么区别?
10 什么是 lambda 或 箭头函数?
11 什么是头等函数?
12 什么是一阶函数?
13 什么是高阶函数?
14 什么是一元函数?
15 什么是柯里化函数?
16 什么是纯函数?
17 let 关键字的用途是什么?
18 let 和 var 有什么区别?
19 为什么选择 let 这个名字作为关键字?
20 你如何在没有错误的情况下重新声明 switch 块中的变量?
21 什么是暂时性死区?
22 什么是IIFE(立即执行函数表达式)?
23 使用模块有什么好处?
24 什么是memoization(记忆)?
25 什么是Hoisting(变量提升)?
26 ES6 中的类是什么?
27 什么是closures(闭包)?
28 什么是modules(模块)?
29 为什么需要模块?
30 javascript中的作用域是什么?
31 什么是Service Worker?
32 如何使用 Service Worker 操作 DOM?
33 你如何在 Service Worker 重新启动时重用信息?
34 什么是 IndexedDB?
35 什么是 web storage?
36 什么是 post message?
37 什么是 Cookie ?
38 为什么需要 Cookie ?
39 cookie 中有哪些选项 ?
40 你如何删除cookie ?
41 cookie、本地存储和会话存储有什么区别 ?
42 localStorage 和 sessionStorage 的主要区别是什么?
43 你如何访问web 存储?
44 会话存储有哪些可用的方法?
45 什么是存储事件及其事件处理程序?
46 为什么需要web 存储?
47 你如何检查 Web 存储浏览器支持?
48 你如何检查web workers浏览器支持?
49 举个 web worker 的例子
50 web worker 对 DOM 的限制是什么?
51 什么是promise?
52 为什么需要promise?
53 promise的三种状态是什么?
54 什么是回调函数?
55 为什么我们需要回调?
56 什么是回调地狱?
57 什么是服务器发送事件?
58 你如何接收服务器发送的事件通知?
59 你如何检查浏览器对服务器发送事件的支持?
60 服务器发送的事件有哪些可用的事件?
61 promise的主要规则是什么?
62 回调中的回调是什么?
63 什么是promise chaining?
64 什么是 promise.all?
65 promise中race方法的目的是什么?
66 什么是javascript中的严格模式?
67 为什么需要严格模式?
68 你如何声明严格模式?
69 双感叹号的目的是什么?
70 删除运算符的目的是什么?
71 什么是typeof运算符?
72 什么是未定义属性?
73 什么是空值?
74 null 和 undefined 有什么区别?
75 什么是eval?
76 Window和Document有什么区别?
77 你如何在 javascript 中访问历史记录?
78 你如何检测大写锁定键是否打开?
79 什么是isNaN?
80 未声明变量和未定义变量有什么区别?
81 什么是全局变量?
82 全局变量有什么问题?
83 什么是 NaN 属性?
84 isFinite 函数的目的是什么?
85 什么是event flow(事件流)?
86 什么是event bubbling(事件冒泡)?
87 什么是event capturing(事件捕获)?
88 你如何使用 JavaScript 提交表单?
89 你如何找到操作系统详细信息?
90 document load 和 DOMContentLoaded 事件有什么区别?
91 Native 、Host 和User objects之间有什么区别?
92 用于调试 JavaScript 代码的工具或技术有哪些?
93 promises相对于回调的优缺点是什么?
94 attribute 和 property有什么区别?
95 什么是 same-origin policy(同源策略)?
96 void 0的目的是什么?
97 JavaScript 是编译型语言还是解释型语言?
98 JavaScript 是区分大小写的语言吗?
99 Java 和 JavaScript 之间有什么关系吗?
100 什么是event?
101 谁创造了 JavaScript ?
102 preventDefault 方法有什么用?
103 stopPropagation方法有什么用?
104 return false 涉及哪些步骤?
105 什么是BOM(浏览器对象模型)?
106 setTimeout有什么用?
107 setInterval有什么用?
108 为什么 JavaScript 被视为单线程?
109 什么是event delegation(事件委托)?
110 什么是 ECMAScript?
111 什么是 JSON?
112 JSON的语法规则是什么?
113 JSON 字符串化的目的是什么?
114 你如何解析 JSON 字符串?
115 为什么需要 JSON?
116 什么是 PWA?
117 clearTimeout 方法的目的是什么?
118 clearInterval 方法的目的是什么?
119 你如何在javascript中重定向新页面?
120 你如何检查一个字符串是否包含一个子字符串?
121 你如何在 javascript 中验证电子邮件?
122 你如何使用 javascript 获取当前 url?
123 location对象的各种url属性是什么?
124 如何在javascript中获取查询字符串值?
125 如何检查对象中是否存在键?
126 你如何循环或枚举 javascript 对象?
127 你如何测试一个空对象?
128 什么是参数对象?
129 你如何使字符串的第一个字母大写?
130 for循环的优缺点是什么?
131 你如何在javascript中显示当前日期?
132 你如何比较两个日期对象?
133 你如何检查一个字符串是否以另一个字符串开头?
134 你如何在javascript中修剪字符串?
135 你如何在javascript中添加一个键值对?
136 ‘!–’ 符号是否表示一个特殊运算符?
137 你如何为变量分配默认值?
138 你如何定义多行字符串?
139 什么是app shell model?
140 我们可以为函数定义属性吗?
141 找到函数期望的参数数量的方法是什么?
142 什么是 polyfill?
143 什么是 break 和 continue 语句?
144 什么是js标签?
145 将声明放在首位有什么好处?
146 初始化变量有什么好处?
147 创建新对象的建议是什么?
148 你如何定义 JSON 数组?
149 你如何生成随机整数?
150 你能写一个随机整数函数来打印范围内的整数吗?
151 什么是tree shaking(摇树)?
152 tree shaking(摇树)需要什么?
153 是否推荐使用 eval?
154 什么是正则表达式?
155 正则表达式中可用的字符串方法有哪些?
156 正则表达式中的修饰符是什么?
157 什么是正则表达式模式?
158 什么是 RegExp 对象?
159 如何在字符串中搜索模式?
160 exec方法的目的是什么?
161 如何更改 HTML 元素的样式?
162 1+2+'3' 的结果是什么?
163 什么是调试器语句?
164 调试中断点的目的是什么?
165 我可以使用保留字作为标识符吗?
166 你如何检测移动浏览器?
167 如何在没有正则表达式的情况下检测移动浏览器?
168 你如何使用JS获取图像的宽度和高度?
169 如何进行同步 HTTP 请求?
170 如何进行异步 HTTP 请求?
171 你如何在javascript中将日期转换为另一个时区?
172 用于获取窗口大小的属性是什么?
173 什么是javascript中的条件运算符?
174 你能在条件运算符上应用chaining吗?
175 页面加载后执行javascript的方式有哪些?
176 proto 和 prototype有什么区别?
177 举个例子你真的需要分号
178 什么是freeze 方法?
179 freeze 方法的目的是什么?
180 为什么我需要使用freeze 方法?
181 你如何检测浏览器语言首选项?
182 如何使用javascript将字符串转换为标题大小写?
183 你如何检测页面中禁用的javascript?
184 javascript支持的各种运算符有哪些?
185 什么是rest 参数?
186 如果不使用 rest 参数作为最后一个参数会发生什么?
187 什么是 JavaScript 中可用的按位运算符?
188 什么是spread operator(展开运算符)?
189 你如何确定对象是否被冻结?
190 你如何确定两个值相同或不使用对象?
191 使用Object 的 is方法的目的是什么?
192 如何将属性从一个对象复制到另一个对象?
193 赋值方法有哪些应用?
194 什么是Proxy(代理)对象?
195 seal 方法的目的是什么?
196 seal 方法的应用有哪些?
197 freeze 和 seal 方法有什么区别?
198 如何判断物体是否 seal?
199 如何获得可枚举的键值对?
200 Object.values 和 Object.entries 方法的主要区别是什么?
201 如何获取任何对象的键列表?
202 你如何用 prototype 创建一个对象?
203 什么是WeakSet?
204 WeakSet 和 Set 有什么区别?
205 列出 WeakSet 上可用的方法集合?
206 什么是 WeakMap?
207 WeakMap 和 Map 有什么区别?
208 列出 WeakMap 上可用的方法集合?
209 uneval 的目的是什么?
210 你如何 encode (编码)一个 URL?
211 你如何 decode (解码)一个 URL?
212 你如何打印网页的内容?
213 uneval 和 eval 有什么区别?
214 什么是 anonymous (匿名)函数?
215 局部变量和全局变量的优先顺序是什么?
216 什么是 javascript 访问器?
217 你如何在对象构造函数上定义属性?
218 get 和defineProperty 有什么区别?
219 Getter 和 Setter 的优点是什么?
220 我可以使用defineProperty方法添加 getter 和 setter 吗?
221 switch-case 的目的是什么?
222 使用 swtich case 需要遵循什么约定?
223 什么是原始数据类型?
224 访问对象属性的不同方式有哪些?
225 什么是函数参数规则?
226 什么是错误对象?
227 当你收到语法错误时
228 错误对象有哪些不同的错误名称?
229 错误处理中的各种语句是什么?
230 javascript中的两种类型的循环是什么?
231 什么是 nodejs?
232 什么是 Intl 对象?
233 你如何执行特定于语言的日期和时间格式化?
234 什么是迭代器?
235 同步迭代是如何工作的?
236 什么是事件循环?
237 什么是调用栈?
238 什么是事件队列?
239 什么是装饰器?
240 Intl 对象的属性是什么?
241 什么是一元运算符?
242 如何对数组中的元素进行排序?
243 排序数组时 compareFunction 的目的是什么?
244 你如何反转数组?
245 你如何在数组中找到最小值和最大值?
246 如何在没有math函数的情况下找到最小值和最大值?
247 什么是空语句及其目的?
248 如何获取模块的元数据?
249 什么是逗号运算符?
250 逗号运算符的优点是什么?
251 什么是 typescript ?
252 javascript 和 typescript 有什么区别?
253 typescript 相对于 javascript 的优势是什么?
254 什么是对象初始值设定项?
255 什么是构造方法?
256 如果在一个类中多次编写构造函数会发生什么?
257 如何调用父类的构造函数?
258 你如何获得一个对象的原型?
259 如果我为 getPrototype 方法传递字符串类型会发生什么?
260 如何将一个对象的原型设置为另一个对象?
261 你如何检查一个对象是否可以扩展?
262 如何防止对象扩展?
263 使对象不可扩展的不同方法有哪些?
264 如何在一个对象上定义多个属性?
265 JavaScript 中的 MEAN 是什么?
266 什么是 javascript 中的混淆?
267 为什么需要混淆?
268 什么是Minification(缩小)?
269 缩小有什么好处?
270 混淆和加密有什么区别?
271 常用的缩小工具有哪些?
272 你如何使用 javascript 执行表单验证?
273 如何在没有 javascript 的情况下执行表单验证?
274 可用于约束验证的 DOM 方法有哪些?
275 什么是可用的约束验证 DOM 属性?
276 什么是有效性属性列表?
277 举例使用 rangeOverflow 属性?
278 javascript 中是否提供枚举功能?
279 什么是枚举?
280 你如何列出一个对象的所有属性?
281 如何获取对象的属性描述符?
282 属性描述符提供的属性是什么?
283 你如何扩展类?
284 如何在不重新加载页面的情况下修改 url?
285 如何检查数组是否包含特定值?
286 你如何比较标量数组?
287 如何从获取参数中获取值?
288 你如何用逗号作为千位分隔符打印数字?
289 java和javascript有什么区别?
290 javascript是否支持命名空间?
291 你如何声明命名空间?
292 如何从父页面调用 iframe 中的 javascript 代码?
293 如何从日期获取时区偏移量?
294 如何动态加载 CSS 和 JS 文件?
295 在 DOM 中查找 HTML 元素的不同方法有哪些?
296 什么是jQuery?
297 什么是 V8 JavaScript 引擎?
298 为什么我们称javascript为动态语言?
299 什么是空运算符?
300 如何设置光标等待?
301 你如何创建一个无限循环?
302 为什么需要避免 with 语句?
303 以下 for 循环的输出是什么?
304 列出 ES6 的一些特性?
305 什么是 ES6?
306 我可以重新声明 let 和 const 变量吗?
307 是 const 变量使值不可变吗?
308 什么是默认参数?
309 什么是模板字面量?
310 如何在模板文字中编写多行字符串?
311 什么是嵌套模板?
312 什么是标记模板?
313 什么是原始字符串?
314 什么是解构赋值?
315 解构赋值中的默认值是什么?
316 你如何在解构赋值中交换变量?
317 什么是增强的对象字面量?
318 什么是动态导入?
319 动态导入的用例是什么?
320 什么是typed arrays (类型数组)?
321 模块加载器的优点是什么?
322 什么是 collation?
323 什么是...of 语句?
324 下面展开运算符数组的输出是什么?
325 PostMessage 安全吗?
326 postmessage目标源作为通配符有什么问题?
327 你如何避免收到来自攻击者的 postMessages?
328 我可以完全避免使用 postMessages 吗?
329 postMessages 是否同步?
330 Javascript 是什么范式?
331 内部和外部 javascript有什么区别?
332 JavaScript 是否比服务器端脚本更快?
333 你如何获得复选框的状态?
334 双波浪号运算符的目的是什么?
335 你如何将字符转换为 ASCII 码?
336 什么是数组缓冲区?
337 下面的字符串表达式的输出是什么?
338 Error对象的目的是什么?
339 EvalError 对象的目的是什么?
340 从非严格模式到严格模式抛出的案例错误列表是什么?
341 是否所有对象都有prototypes(原型)?
342 参数和实参有什么区别?
343 数组中 some 方法的目的是什么?
344 你如何组合两个或多个数组?
345 浅拷贝和深拷贝有什么区别?
346 你如何创建一个字符串的特定数量的副本?
347 你如何根据正则表达式返回所有匹配的字符串?
348 你如何在开头或结尾修剪字符串?
349 下面带有一元运算符的控制台语句的输出是什么?
350 javascript 是否使用 mixins?
351 什么是 thunk 函数?
352 什么是异步 thunk?
353 以下函数调用的输出是什么?
354 如何从字符串中删除所有换行符?
355 回流和重绘有什么区别?
356 否定数组会发生什么?
357 如果我们添加两个数组会发生什么?
358 在假值上添加加法运算符的输出是什么?
359 如何使用特殊字符创建自字符串?
360 如何从数组中删除虚假值?
361 你如何获得数组的唯一值?
362 什么是解构别名?
363 如何在不使用 map 方法的情况下映射数组值?
364 你如何清空一个数组?
365 你如何将数字四舍五入到某些小数?
366 将数组转换为对象的最简单方法是什么?
367 你如何用一些数据创建一个数组?
368 控制台对象的占位符是什么?
369 是否可以将 CSS 添加到控制台消息?
370 控制台对象的dir方法的目的是什么?
371 是否可以在控制台中调试 HTML 元素?
372 如何使用控制台对象以表格格式显示数据?
373 你如何验证参数是否为数字?
374 你如何创建复制到剪贴板按钮?
375 获取时间戳的快捷方式是什么?
376 你如何展平多维数组?
377 什么是最简单的多条件检查?
378 你如何捕获浏览器后退按钮?
379 如何禁用网页中的右键单击?
380 什么是包装对象?
381 什么是 AJAX?
382 处理异步代码的不同方式有哪些?
383 如何取消提取请求?
384 什么是网络语音API?
385 什么是最小超时限制?
386 你如何在现代浏览器中实现零超时?
387 事件循环中的任务是什么?
388 什么是微任务?
389 什么是不同的事件循环?
390 queueMicrotask 的目的是什么?
391 你如何在 typescript 文件中使用 javascript 库?
392 promises 和 observables 有什么区别?
393 什么是堆?
394 什么是事件表?
395 什么是微任务队列?
396 shim 和 polyfill 有什么区别?
397 你如何检测原始或非原始值类型?
398 什么是Babel ?
399 Node.js 是完全单线程的吗?
400 可观察对象的常见用例是什么?
401 什么是 RxJS?
402 函数构造函数和函数声明有什么区别?
403 什么是短路状态?
404 调整数组大小的最简单方法是什么?
405 什么是可观察的?
406 函数声明和类声明有什么区别?
407 什么是异步函数?
408 你如何防止 promises swallowing errors?
409 什么是 deno ?
410 你如何在javascript中使对象可迭代?
411 什么是正确的尾调用?
412 你如何检查一个对象是否是一个承诺?
413 如何检测函数是否被调用为构造函数?
414 arguments 对象和rest 参数之间有什么区别?
415 扩展运算符和rest 参数之间有什么区别?
416 有哪些不同种类的 generators(生成器)?
417 什么是内置可迭代对象?
418 for...of 和 for...in 语句之间有什么区别?
419 如何定义实例和非实例属性?
420 isNaN 和 Number.isNaN 有什么区别?
421 如何在没有任何额外括号的情况下调用 IIFE?
422 可以在 switch case 中使用表达式吗?
423 忽略承诺错误的最简单方法是什么?
424 如何使用 CSS 设置控制台输出的样式?
101.谁创造了 JavaScript ?  

JavaScript 是由 Brendan Eich 于 1995 年在 Netscape Communications 期间创建的。 最初它是以 Mocha 的名义开发的,但后来在 Netscape 的测试版中首次发布时,该语言被正式称为 LiveScript。当时Sun公司和网景公司有合作,SUN公司注册了“JavaScript”商标,两公司协商后把LiveScript改成了现在的JavaScript。

⬆ 返回顶部 回到第100题


102.preventDefault 方法有什么用?

如果事件是可取消的,则 preventDefault() 方法会取消该事件,这意味着属于该事件的默认操作或行为将不会发生。例如,单击提交按钮时阻止表单提交和单击超链接时阻止打开页面 URL 是一些常见用例。

 document.getElementById("link").addEventListener("click", function(event){
  event.preventDefault();
 });
复制代码

==注意==:请记住,并非所有事件都可以取消。

⬆ 返回顶部 回到第100题


103.stopPropagation方法有什么用?

stopPropagation 方法用于阻止事件在事件链中向上冒泡。例如,以下带有 stopPropagation 方法的嵌套 div 在单击嵌套 div(Div1) 时可防止默认事件传播

 <p>Click DIV1 Element</p>
 <div onclick="secondFunc()">DIV 2
   <div onclick="firstFunc(event)">DIV 1</div>
 </div>

 <script>
 function firstFunc(event) {
   alert("DIV 1");
   event.stopPropagation();
 }

 function secondFunc() {
   alert("DIV 2");
 }
 </script>
复制代码

⬆ 返回顶部 回到第100题


104.return false 涉及哪些步骤?

事件处理程序中的 return false 语句执行以下步骤,

1.首先它停止浏览器的默认操作或行为。 2.它阻止事件传播 DOM 3.停止回调执行并在调用时立即返回。

⬆ 返回顶部 回到第100题


105.什么是BOM(浏览器对象模型)?

浏览器对象模型 (BOM) 允许 JavaScript 与浏览器“对话”。它由作为窗口子项的对象导航器、历史记录、屏幕、位置和文档组成。浏览器对象模型不是标准化的,可以根据不同的浏览器而变化。

⬆ 返回顶部 回到第100题


106.setTimeout有什么用?

setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。例如,让我们使用 setTimeout 方法在 2 秒后记录一条消息,

 setTimeout(function(){ console.log("Good morning"); }, 2000);
复制代码

⬆ 返回顶部 回到第100题


107.setInterval有什么用?

setInterval() 方法用于以指定的时间间隔(以毫秒为单位)调用函数或计算表达式。例如,让我们使用 setInterval 方法在 2 秒后记录一条消息,

 setInterval(function(){ console.log("Good morning"); }, 2000);
复制代码

⬆ 返回顶部 回到第100题


108.为什么 JavaScript 被视为单线程?

JavaScript 是一种单线程语言。因为语言规范不允许程序员编写代码以便解释器可以在多个线程或进程中并行运行其中的一部分。而像 java、go、C++ 这样的语言可以制作多线程和多进程程序。

⬆ 返回顶部 回到第100题


109.什么是event delegation(事件委托)?

事件委托是一种侦听事件的技术,您可以委托一个父元素作为其内部发生的所有事件的侦听器。

例如,如果您想检测特定表单内的字段变化,您可以使用事件委托技术,

 var form = document.querySelector('#registration-form');
 // 听从表单内字段的更改
 form.addEventListener('input', function (event) {
 // 记录已更改的字段
 console.log(event.target);
 }, false);
复制代码

⬆ 返回顶部 回到第100题


110.什么是 ECMAScript?

ECMAScript 是构成 JavaScript 基础的脚本语言。ECMAScript 由 ECMA 国际标准组织在 ECMA-262 和 ECMA-402 规范中标准化。ECMAScript 的第一版于 1997 年发布。

⬆ 返回顶部 回到第100题


111.什么是 JSON?

JSON(JavaScript Object Notation)是一种用于数据交换的轻量级格式。它基于 JavaScript 语言的一个子集,对象是在 JavaScript 中构建的。

⬆ 返回顶部 回到第100题


112.JSON的语法规则是什么?

下面是 JSON 的语法规则列表

1.数据在名称/值对中 2.数据以逗号分隔 3.花括号容纳对象 4.方括号保存数组

⬆ 返回顶部 回到第100题


113.JSON 字符串化的目的是什么?

向 Web 服务器发送数据时,数据必须采用字符串格式。您可以通过使用 stringify() 方法将 JSON 对象转换为字符串来实现此目的。

 var userJSON = {'name': 'Haiyong', age: 31}
 var userString = JSON.stringify(user);
 console.log(userString); //"{"name":"Haiyong","age":31}"
复制代码

⬆ 返回顶部 回到第100题


114.你如何解析 JSON 字符串?

从 Web 服务器接收数据时,数据始终为字符串格式。但是您可以使用 parse() 方法将此字符串值转换为 javascript 对象。

 var userString = '{"name":"Haiyong","age":31}';
 var userJSON = JSON.parse(userString);
 console.log(userJSON);// {name: "Haiyong", age: 31}
复制代码

⬆ 返回顶部 回到第100题


115.为什么需要 JSON?

在浏览器和服务器之间交换数据时,数据只能是文本。由于 JSON 仅为文本,因此它可以轻松地与服务器之间进行发送和发送,并可用作任何编程语言的数据格式。

⬆ 返回顶部 回到第100题


116.什么是 PWA?

渐进式 Web 应用程序 (Progressive web applications) 是一种通过 Web 交付的移动应用程序,使用常见的 Web 技术(包括 HTML、CSS 和 JavaScript)构建。这些 PWA 部署到服务器上,通过 URL 访问,并由搜索引擎索引。

⬆ 返回顶部 回到第100题


117.clearTimeout 方法的目的是什么?

javascript 中使用 clearTimeout() 函数来清除之前由 setTimeout() 函数设置的超时。即, setTimeout() 函数的返回值存储在一个变量中,并将其传递给 clearTimeout() 函数以清除计时器。

例如,下面的 setTimeout 方法用于在 3 秒后显示消息。可以通过 clearTimeout() 方法清除此超时。

 <script>
 var msg;
 function greeting() {
    alert('Good morning');
 }
 function start() {
   msg =setTimeout(greeting, 3000);

 }

 function stop() {
     clearTimeout(msg);
 }
 </script>
复制代码

⬆ 返回顶部 回到第100题


118.clearInterval 方法的目的是什么?

javascript 中使用 clearInterval() 函数清除 setInterval() 函数设置的间隔。即, setInterval() 函数返回的返回值存储在一个变量中,并将其传递给 clearInterval() 函数以清除间隔。

例如,下面的 setInterval 方法用于每 3 秒显示一次消息。可以通过 clearInterval() 方法清除此间隔。

 <script>
 var msg;
 function greeting() {
    alert('Good morning');
 }
 function start() {
   msg = setInterval(greeting, 3000);

 }

 function stop() {
     clearInterval(msg);
 }
 </script>
复制代码

⬆ 返回顶部 回到第100题


119.你如何在javascript中重定向新页面?

在 vanilla javascript 中,您可以使用locationwindow 对象的属性重定向到新页面。语法如下,

 function redirect() {
    window.location.href = 'newPage.html';
 }
复制代码

⬆ 返回顶部 回到第100题


120.你如何检查一个字符串是否包含一个子字符串?

有 3 种可能的方法来检查字符串是否包含子字符串,

1.使用 includes: ES6 提供的String.prototype.includes方法来测试字符串是否包含子字符串

 var mainString = "hello", subString = "hell";
 mainString.includes(subString)
复制代码

2.使用 indexOf:在 ES5 或更旧的环境中,您可以使用String.prototype.indexOfwhich 返回子字符串的索引。如果索引值不等于 -1,则表示子字符串存在于主字符串中。

 var mainString = "hello", subString = "hell";
 mainString.indexOf(subString) !== -1
复制代码

3.使用 RegEx:高级解决方案是使用正则表达式的测试方法( RegExp.test),它允许针对正则表达式进行测试

 var mainString = "hello", regex = /hell/;
 regex.test(mainString)
复制代码

⬆ 返回顶部 回到第100题


121.你如何在 javascript 中验证电子邮件?

您可以使用正则表达式在 javascript 中验证电子邮件。建议在服务器端而不是客户端进行验证。因为可以在客户端禁用 javascript。

 function validateEmail(email) {
     var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
     return re.test(String(email).toLowerCase());
 }
复制代码

上面的正则表达式接受 unicode 字符。

⬆ 返回顶部 回到第100题


122.你如何使用 javascript 获取当前 url?

您可以使用window.location.href表达式来获取当前的 url 路径,也可以使用相同的表达式来更新 URL。您也可以document.URL用于只读目的,但此解决方案在 FF 中存在问题。

 console.log('location.href', window.location.href); // 返回完整 URL
复制代码

⬆ 返回顶部 回到第100题


123.location对象的各种url属性是什么?

以下Location对象属性可用于访问页面的 URL 组件,

1.href - 整个 URL 2.protocol - URL 的协议 3.host - URL 的主机名和端口 4.hostname - URL 的主机名 5.port - URL 中的端口号 6.pathname - URL 的路径名 7.search - URL 的查询部分 8.hash - URL 的锚点部分

⬆ 返回顶部 回到第100题


124.如何在javascript中获取查询字符串值?

您可以使用 URLSearchParams 在 javascript 中获取查询字符串值。让我们看一个从 URL 查询字符串中获取客户端代码值的示例,

 const urlParams = new URLSearchParams(window.location.search);
 const clientCode = urlParams.get('clientCode');
复制代码

⬆ 返回顶部 回到第100题


125.如何检查对象中是否存在键?

您可以使用三种方法检查对象中是否存在键,

使用 in 运算符:无论对象中是否存在键,您都可以使用 in 运算符

 "key" in obj
复制代码

如果你想检查一个键是否不存在,记得使用括号,

 !("key" in obj)
复制代码

使用 hasOwnProperty 方法:您可以使用hasOwnProperty专门测试对象实例的属性(而不是继承的属性)

 obj.hasOwnProperty("key") // true
复制代码

使用未定义的比较:如果从对象访问不存在的属性,则结果是未定义的。让我们将属性与 undefined 进行比较以确定该属性的存在。

 const user = {
   name: 'Haiyong'
 };

 console.log(user.name !== undefined);     // true
 console.log(user.nickName !== undefined); // false
复制代码

⬆ 返回顶部 回到第100题


126.你如何循环或枚举 javascript 对象?

您可以使用for-in循环来循环遍历 javascript 对象。您还可以确保您获得的密钥是对象的实际属性,而不是来自使用hasOwnProperty方法的原型。

 var object = {
     "k1": "value1",
     "k2": "value2",
     "k3": "value3"
 };

 for (var key in object) {
     if (object.hasOwnProperty(key)) {
         console.log(key + " -> " + object[key]); // k1 -> value1 ...
     }
 }
复制代码

⬆ 返回顶部 回到第100题


127.你如何测试一个空对象?

基于 ECMAScript 版本有不同的解决方案

使用对象条目(ECMA 7+):您可以使用对象条目长度和构造函数类型。

 Object.entries(obj).length === 0 && obj.constructor === Object // Since date object length is 0, you need to check constructor check as well
复制代码

使用对象键(ECMA 5+):您可以使用对象键长度和构造函数类型。

 Object.keys(obj).length === 0 && obj.constructor === Object // Since date object length is 0, you need to check constructor check as well
复制代码

将 for-in 与 hasOwnProperty(ECMA 5 之前)一起使用:您可以将 for-in 循环与 hasOwnProperty 一起使用。

 function isEmpty(obj) {
   for(var prop in obj) {
     if(obj.hasOwnProperty(prop)) {
       return false;
     }
   }

   return JSON.stringify(obj) === JSON.stringify({});
 }
复制代码

⬆ 返回顶部 回到第100题


128.什么是参数对象?

arguments 对象是一个类似数组的对象,可在函数内部访问,其中包含传递给该函数的参数的值。例如,让我们看看如何在 sum 函数中使用 arguments 对象,

 function sum() {
     var total = 0;
     for (var i = 0, len = arguments.length; i < len; ++i) {
         total += arguments[i];
     }
     return total;
 }

 sum(1, 2, 3) // returns 6
复制代码

==注意==:您不能在参数对象上应用数组方法。但是您可以转换为常规数组,如下所示

 var argsArray = Array.prototype.slice.call(arguments);
复制代码

⬆ 返回顶部 回到第100题


129.你如何使字符串的第一个字母大写?

您可以创建一个函数,该函数使用一系列字符串方法(例如 charAt、toUpperCase 和 slice 方法)来生成首字母大写的字符串。

 function capitalizeFirstLetter(string) {
     return string.charAt(0).toUpperCase() + string.slice(1);
 }
复制代码

⬆ 返回顶部 回到第100题


130.for循环的优缺点是什么?

for 循环是 JavaScript 中常用的迭代语法。它有利有弊

优点

  • 适用于各种环境
  • 您可以使用 break 和 continue 流控制语句

缺点

  • 太冗长
  • Imperative(命令式编程)
  • 您可能会面临一次一次的错误

⬆ 返回顶部 回到第100题


131.你如何在javascript中显示当前日期?

您可以使用new Date()生成包含当前日期和时间的新 Date 对象。例如,让我们以 mm/dd/yyyy 显示当前日期

 var today = new Date();
 var dd = String(today.getDate()).padStart(2, '0');
 var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
 var yyyy = today.getFullYear();

 today = mm + '/' + dd + '/' + yyyy;
 document.write(today);
复制代码

⬆ 返回顶部 回到第100题


132.你如何比较两个日期对象?

您需要使用 date.getTime() 方法来比较日期值而不是比较运算符(==!====!== 运算符)

 var d1 = new Date();
 var d2 = new Date(d1);
 console.log(d1.getTime() === d2.getTime()); //True
 console.log(d1 === d2); // False
复制代码

⬆ 返回顶部 回到第100题


133.你如何检查一个字符串是否以另一个字符串开头?

您可以使用 ECMAScript 6 的String.prototype.startsWith()方法来检查一个字符串是否以另一个字符串开头。但并非所有浏览器都支持它。让我们看一个例子来看看这个用法,

 "Good morning".startsWith("Good"); // true
 "Good morning".startsWith("morning"); // false
复制代码

⬆ 返回顶部 回到第100题


134.你如何在javascript中修剪字符串?

JavaScript 为字符串类型提供了一种修剪方法来修剪出现在字符串开头或结尾的任何空格。

 "  Hello World   ".trim(); //Hello World
复制代码

如果您的浏览器(<IE9)不支持此方法,那么您可以使用下面的 polyfill。

 if (!String.prototype.trim) {
     (function() {
         // 确保我们修剪 BOM 和 NBSP
         var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
         String.prototype.trim = function() {
             return this.replace(rtrim, '');
         };
     })();
 }
复制代码

⬆ 返回顶部 回到第100题


135.你如何在javascript中添加一个键值对?

向对象添加新属性有两种可能的解决方案。让我们以一个简单的对象来解释这些解决方案。

 var object = {
     key1: value1,
     key2: value2
 };
复制代码

使用点表示法:当您知道属性的名称时,此解决方案很有用

 object.key3 = "value3";
复制代码

使用方括号表示法:当属性的名称是动态确定的时,此解决方案很有用。

 obj["key3"] = "value3";
复制代码

⬆ 返回顶部 回到第100题


136.‘!–’ 符号是否表示一个特殊运算符?

不,不是特殊运算符。但它是 2 个标准运算符的组合

逻辑否定(!) 前缀递减 (--) 首先,该值减一,然后测试它是否等于零,以确定真/假值。


137.你如何为变量分配默认值?

您可以使用逻辑或运算符 || 在赋值表达式中提供默认值。 语法如下所示,

 var a = b || c;
复制代码

根据上面的表达式,只有当 'b' 为假(如果为空、假、未定义、0、空字符串或 NaN)时,变量 'a' 将获得 'c' 的值,否则 'a' 将获得'b' 的值。


138.你如何定义多行字符串?

您可以使用“\”字符后跟行终止符来定义多行字符串文字。

 var str = "This is a \
 very lengthy \
 sentence!";
复制代码

但是如果你在 '' 字符后面有一个空格,代码看起来完全一样,但它会引发一个 SyntaxError。

⬆ 返回顶部 回到第100题


139.什么是app shell model?

application shell (或者是 app shell)架构是构建渐进式 Web 应用程序的一种方式,该应用程序可以可靠且即时地加载到用户的屏幕上,类似于您在本机应用程序中看到的内容。这对于在没有网络的情况下快速将一些初始 HTML 显示到屏幕上很有用。

⬆ 返回顶部 回到第100题


140.我们可以为函数定义属性吗?

是的,我们可以为函数定义属性,因为函数也是对象。

 fn = function(x) {
    //函数代码在这里
 }

 fn.name = "Haiyong";

 fn.profile = function(y) {
   //配置文件代码在这里
 }
复制代码

⬆ 返回顶部 回到第100题


141.找到函数期望的参数数量的方法是什么?

您可以使用function.length语法来查找函数所需的参数数量。让我们举一个sum计算数字和的函数的例子,

 function sum(num1, num2, num3, num4){
     return num1 + num2 + num3 + num4;
 }
 sum.length // 4 是预期的参数数量。
复制代码

⬆ 返回顶部 回到第100题


142.什么是 polyfill?

polyfill 是一段 JS 代码,用于在本身不支持它的旧浏览器上提供现代功能。例如,Silverlight 插件 polyfill 可用于模拟 Microsoft Internet Explorer 7 上的 HTML Canvas 元素的功能。

⬆ 返回顶部 回到第100题


143.什么是 break 和 continue 语句?

break 语句用于“跳出”循环。即,它中断循环并在循环后继续执行代码。

 for (i = 0; i < 10; i++) {
   if (i === 5) { break; }
   text += "Number: " + i + "<br>";
 }
复制代码

continue 语句用于“跳过”循环中的一次迭代。即,如果出现指定条件,它会中断一次迭代(在循环中),并继续循环中的下一次迭代。

 for (i = 0; i < 10; i++) {
     if (i === 5) { continue; }
     text += "Number: " + i + "<br>";
 }
复制代码

⬆ 返回顶部 回到第100题


144.什么是js标签?

label 语句允许我们在 JavaScript 中命名循环和块。然后我们可以使用这些标签稍后引用代码。例如,下面带有标签的代码避免在数字相同时打印数字,

 var i, j;

 loop1:
 for (i = 0; i < 3; i++) {
    loop2:
    for (j = 0; j < 3; j++) {
       if (i === j) {
          continue loop1;
       }
       console.log('i = ' + i + ', j = ' + j);
    }
 }

 // 输出:
 //   "i = 1, j = 0"
 //   "i = 2, j = 0"
 //   "i = 2, j = 1"
复制代码

⬆ 返回顶部 回到第100题


145.将声明放在首位有什么好处?

建议将所有声明保留在每个脚本或函数的顶部。这样做的好处是,

1.提供更清晰的代码 2.它提供了一个查找局部变量的地方 3.轻松避免不需要的全局变量 4.它减少了不需要的重新声明的可能性

⬆ 返回顶部 回到第100题


146.初始化变量有什么好处?

由于以下好处,建议初始化变量,

1.它提供了更清晰的代码 2.它提供了一个初始化变量的地方 3.避免代码中的未定义值

⬆ 返回顶部 回到第100题


147.创建新对象的建议是什么?

建议避免使用new Object(). 相反,您可以根据它的类型初始化值来创建对象。

1.分配 {} 而不是 new Object() 2.分配 "" 而不是 new String() 3.分配 0 而不是 new Number() 4.分配 false 而不是 new Boolean() 5.分配 [] 而不是 new Array() 6.分配 /()/ 而不是 new RegExp() 7.赋值 function (){} 而不是 new Function()

您可以将它们定义为示例,

 var v1 = {};
 var v2 = "";
 var v3 = 0;
 var v4 = false;
 var v5 = [];
 var v6 = /()/;
 var v7 = function(){};
复制代码

⬆ 返回顶部 回到第100题


148.你如何定义 JSON 数组?

JSON 数组写在方括号内,数组包含 javascript 对象。例如,用户的 JSON 数组如下所示,

 "users":[
   {"firstName":"Haiyong", "lastName":"Abrahm"},
   {"firstName":"Anna", "lastName":"Smith"},
   {"firstName":"Shane", "lastName":"Warn"}
 ]
复制代码

⬆ 返回顶部 回到第100题


149.你如何生成随机整数?

您可以使用 Math.random() 和 Math.floor() 来返回随机整数。例如,如果要生成 1 到 10 之间的随机整数,则乘法因子应为 10,

 Math.floor(Math.random() * 10) + 1;     // 返回一个从 1 到 10 的随机整数
 Math.floor(Math.random() * 100) + 1;     // 返回一个从 1 到 100 的随机整数
复制代码

==注意==: Math.random() 返回一个介于 0(含)和 1(不含)之间的随机数

⬆ 返回顶部 回到第100题


150.你能写一个随机整数函数来打印范围内的整数吗?

是的,您可以创建一个适当的随机函数来返回一个介于 min 和 max 之间的随机数(均包括在内)

 function randomInteger(min, max) {
   return Math.floor(Math.random() * (max - min + 1) ) + min;
 }
 randomInteger(1, 100); // 返回一个从 1 到 100 的随机整数
 randomInteger(1, 1000); // 返回一个从 1 到 1000 的随机整数
复制代码

⬆ 返回顶部 回到第150题


151.什么是tree shaking(摇树)?

tree shaking(摇树)是消除死代码的一种形式。这意味着在构建过程中未使用的模块不会包含在包中,因此它依赖于 ES2015 模块语法的静态结构,(即导入和导出)。最初这已被 ES2015 模块捆绑器推广rollup。

⬆ 返回顶部 回到第150题


152.tree shaking(摇树)需要什么?

Tree Shaking 可以显着减少任何应用程序中的代码大小。即,我们通过网络发送的代码越少,应用程序的性能就越高。例如,如果我们只想使用 SPA 框架创建一个“Hello World”应用程序,那么它大约需要几 MB,但是通过 treeShaking,它可以将大小降低到几百 KB。摇树在 Rollup 和 Webpack 打包器中实现。

⬆ 返回顶部 回到第150题


153.是否推荐使用 eval?

不推荐,它允许运行导致安全问题的任意代码。我们知道 eval() 函数用于将文本作为代码运行。在大多数情况下,应该没有必要使用它。

⬆ 返回顶部 回到第150题


154.什么是正则表达式?

正则表达式是形成搜索模式的字符序列。您可以使用此搜索模式在文本中搜索数据。这些可用于执行所有类型的文本搜索和文本替换操作。现在让我们看看语法格式,

 /pattern/modifiers;
复制代码

例如,用户名不区分大小写的正则表达式或搜索模式是,

 /Haiyong/i
复制代码

可以看看作者对正则表达式的总结:haiyong.blog.csdn.net/article/det…

⬆ 返回顶部 回到第150题


155.正则表达式中可用的字符串方法有哪些?

正则表达式有两个字符串方法:search() 和 replace()。 search() 方法使用表达式来搜索匹配项,并返回匹配项的位置。

 var msg = "Hello Haiyong";
 var n = msg.search(/Haiyong/i); // 6
复制代码

replace() 方法用于返回已替换模式的修改后的字符串。

 var msg = "Hello Haiyong";
 var n = msg.replace(/Haiyong/i, "Buttler"); // Hello Buttler
复制代码

⬆ 返回顶部 回到第150题


156.正则表达式中的修饰符是什么?

修饰符可用于执行不区分大小写的全局搜索。让我们列出一些修饰符,

修饰符 说明
i (ignore) 执行不区分大小写的匹配
g (global) 执行全局匹配而不是在第一次匹配时停止
m (more) 执行多行匹配

让我们举一个全局修饰符的例子,

  var text = "Learn JS one by one";
  var pattern = /one/g;
  var result = text.match(pattern); // one,one
复制代码

⬆ 返回顶部 回到第150题


157.什么是正则表达式模式?

正则表达式提供一组模式以匹配字符。基本上它们分为3种类型,

1.括号:这些用于查找一系列字符。例如,下面是一些用例,

  • [abc]:用于查找括号(a,b,c)之间的任何字符
  • [0-9]:用于查找括号之间的任何数字
  • (a|b):用于查找以 | 分隔的任何选项

2.元字符:这些是具有特殊含义的字符例如,以下是一些用例,

  • \d:用于查找数字
  • \s:用于查找空白字符
  • \b:用于在单词的开头或结尾查找匹配项

3.量词:这些对于定义量很有用,例如,下面是一些用例,

  • n+:用于查找任何包含至少一个 n 的字符串的匹配项
  • n*:用于查找包含零次或多次出现的 n 的任何字符串的匹配项
  • n?:用于查找包含零次或一次 n 的任何字符串的匹配项

⬆ 返回顶部 回到第150题


158.什么是 RegExp 对象?

RegExp 对象是一个具有预定义属性和方法的正则表达式对象。下面来看看 RegExp 对象的简单用法,

 var regexp = new RegExp('\\w+');
 console.log(regexp);
 // 预期输出: /\w+/
复制代码

⬆ 返回顶部 回到第150题


159.如何在字符串中搜索模式?

您可以使用正则表达式的 test() 方法来搜索字符串中的模式,并根据结果返回 true 或 false。

 var pattern = /you/;
 console.log(pattern.test("How are you?")); //true
复制代码

⬆ 返回顶部 回到第150题


160.exec方法的目的是什么?

exec 方法的目的类似于 test 方法,但它执行搜索指定字符串中的匹配项并返回结果数组,或者 null 而不是返回 true/false。

 var pattern = /you/;
 console.log(pattern.exec("How are you?")); //["you", index: 8, 输出: "How are you?", groups: 未定义]
复制代码

⬆ 返回顶部 回到第150题


161.如何更改 HTML 元素的样式?

您可以使用 javascript 更改 HTML 元素的内联样式或类名

使用样式属性:您可以使用样式属性修改内联样式

 document.getElementById("title").style.fontSize = "30px";
复制代码

使用 ClassName 属性:使用 className 属性很容易修改元素类

  document.getElementById("title").className = "custom-title";
复制代码

⬆ 返回顶部 回到第150题


162.1+2+‘3’ 的结果是什么?

输出将是33. 由于1和2是数值,前两位数字的结果将是数值3。下一个数字是字符串类型值,因为数值3和字符串类型值3的相加只是一个串联值33。

⬆ 返回顶部 回到第150题


163.什么是调试器语句?

调试器语句调用任何可用的调试功能,例如设置断点。如果没有可用的调试功能,则此语句无效。

例如,在下面的函数中插入了一个调试器语句。因此, 执行在调试器语句处暂停,就像脚本源中的断点一样。

 function getProfile() {
 // 代码在这里
 debugger;
 // 代码在这里
 }
复制代码

⬆ 返回顶部 回到第150题


164.调试中断点的目的是什么?

一旦执行调试器语句并弹出调试器窗口,您就可以在 javascript 代码中设置断点。在每个断点处,javascript 将停止执行,并让您检查 JavaScript 值。检查值后,您可以使用播放按钮恢复代码的执行。

⬆ 返回顶部 回到第150题


165.我可以使用保留字作为标识符吗?

不,您不能将保留字用作变量、标签、对象或函数名称。让我们看一个简单的例子,

 var else = "hello"; // 未捕获的 SyntaxError: 意外的标记 else
复制代码

⬆ 返回顶部 回到第150题


166.你如何检测移动浏览器?

您可以使用正则表达式,它会根据用户是否使用手机浏览来返回 true 或 false 值。

 window.mobilecheck = function() {
   var mobileCheck = false;
   (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) mobileCheck = true;})(navigator.userAgent||navigator.vendor||window.opera);
   return mobileCheck;
 };
复制代码

⬆ 返回顶部 回到第150题


167.如何在没有正则表达式的情况下检测移动浏览器?

您可以通过简单地运行设备列表并检查用户代理是否匹配任何内容来检测移动浏览器。这是 RegExp 使用的替代解决方案,

 function detectmob() {
  if( navigator.userAgent.match(/Android/i)
  || navigator.userAgent.match(/webOS/i)
  || navigator.userAgent.match(/iPhone/i)
  || navigator.userAgent.match(/iPad/i)
  || navigator.userAgent.match(/iPod/i)
  || navigator.userAgent.match(/BlackBerry/i)
  || navigator.userAgent.match(/Windows Phone/i)
  ){
     return true;
   }
  else {
     return false;
   }
 }
复制代码

⬆ 返回顶部 回到第150题


168.你如何使用JS获取图像的宽度和高度?

您可以使用 Javascript 以编程方式获取图像并检查尺寸(宽度和高度)。

 var img = new Image();
 img.onload = function() {
   console.log(this.width + 'x' + this.height);
 }
 img.src = 'https://img-blog.csdnimg.cn/20210427214255127.png';
复制代码

⬆ 返回顶部 回到第150题


169.如何进行同步 HTTP 请求?

浏览器提供了一个 XMLHttpRequest 对象,可用于从 JavaScript 发出同步 HTTP 请求

 function httpGet(theUrl)
 {
     var xmlHttpReq = new XMLHttpRequest();
     xmlHttpReq.open( "GET", theUrl, false ); // 同步请求为 false
     xmlHttpReq.send( null );
     return xmlHttpReq.responseText;
 }
复制代码

⬆ 返回顶部 回到第150题


170.如何进行异步 HTTP 请求?

浏览器提供了一个 XMLHttpRequest 对象,该对象可用于通过将第三个参数传递为 true 来从 JavaScript 发出异步 HTTP 请求。

 function httpGetAsync(theUrl, callback)
 {
     var xmlHttpReq = new XMLHttpRequest();
     xmlHttpReq.onreadystatechange = function() {
         if (xmlHttpReq.readyState == 4 && xmlHttpReq.status == 200)
             callback(xmlHttpReq.responseText);
     }
     xmlHttp.open("GET", theUrl, true); // 异步为 true
     xmlHttp.send(null);
 }
复制代码

⬆ 返回顶部 回到第150题


171.你如何在javascript中将日期转换为另一个时区?

您可以使用 toLocaleString() 方法将一个时区中的日期转换为另一个时区。例如,让我们将当前日期转换为英式英语时区,如下所示,

 console.log(event.toLocaleString('en-GB', { timeZone: 'UTC' })); //21/06/2021, 08:00:00
复制代码

⬆ 返回顶部 回到第150题


172.用于获取窗口大小的属性是什么?

您可以使用窗口、文档元素和文档正文对象的innerWidth、innerHeight、clientWidth、clientHeight 属性来查找窗口的大小。让我们使用这些属性的组合来计算窗口或文档的大小,

 var width = window.innerWidth
 || document.documentElement.clientWidth
 || document.body.clientWidth;

 var height = window.innerHeight
 || document.documentElement.clientHeight
 || document.body.clientHeight;
复制代码

⬆ 返回顶部 回到第150题


173.什么是javascript中的条件运算符?

条件(三元)运算符是唯一的 JavaScript 运算符,它采用三个操作数作为 if 语句的快捷方式。

 var isAuthenticated = false;
 console.log(isAuthenticated ? 'Hello, welcome' : 'Sorry, you are not authenticated');//Sorry, you are not authenticated
复制代码

⬆ 返回顶部 回到第150题


174.你能在条件运算符上应用chaining吗?

是的,您可以在条件运算符上应用chaining,类似于 if ... else if ... else if ... else 链。语法如下,

 function traceValue(someParam) {
     return condition1 ? value1
          : condition2 ? value2
          : condition3 ? value3
          : value4;
 }

 // 上述条件运算符等价于:

 function traceValue(someParam) {
     if (condition1) { return value1; }
     else if (condition2) { return value2; }
     else if (condition3) { return value3; }
     else { return value4; }
 }
复制代码

⬆ 返回顶部 回到第150题


175.页面加载后执行javascript的方式有哪些?

您可以在页面加载后以多种不同方式执行 javascript,

窗口.onload:

 window.onload = function ...
复制代码

文件加载:

 document.onload = function ...
复制代码

身体加载:

 <body onload="script();">
复制代码

⬆ 返回顶部 回到第150题


176.proto 和 prototype有什么区别?

__proto__对象是在查找链中用于解析方法等的实际对象。而当您使用 new 创建对象时prototype,用于构建__proto__的对象是

 ( new Employee ).__proto__ === Employee.prototype;
 ( new Employee ).prototype === undefined;
复制代码

⬆ 返回顶部 回到第150题


177.举个例子你最好使用分号

建议在 JavaScript 中的每个语句后使用分号。例如,在下面的情况下,由于缺少分号,它在运行时会抛出错误“.. is not a function”。

 // 定义一个函数
 var fn = function () {
     //...
 } // 此行缺少分号
 // 然后在闭包中执行一些代码
 (function () {
     //...
 })();
复制代码

它将被解释为

 var fn = function () {
     //...
 }(function () {
     //...
 })();
复制代码

在这种情况下,我们将第二个函数作为参数传递给第一个函数,然后尝试将第一个函数调用的结果作为函数调用。因此,第二个函数将在运行时因“...不是函数”错误而失败。

⬆ 返回顶部 回到第150题


178.什么是freeze 方法?

reeze()方法用于冻结对象。冻结对象不允许向对象添加新属性,阻止删除和阻止更改现有属性的可枚举性、可配置性或可写性。即,它返回传递的对象并且不创建冻结副本。

const obj = {
   prop: 100
 };

 Object.freeze(obj);
 obj.prop = 200; // 在严格模式下抛出错误

 console.log(obj.prop); //100
复制代码

==注意==:如果传递的参数不是对象,则会导致 TypeError。

⬆ 返回顶部 回到第150题


179.freeze 方法的目的是什么?

以下是使用冻结方法的主要好处,

1.它用于冻结对象和数组。 2.它用于使对象不可变。

⬆ 返回顶部 回到第150题


180.为什么我需要使用freeze 方法?

在面向对象的范式中,现有 API 包含某些不打算在当前上下文之外扩展、修改或重用的元素。因此,它final用作各种语言中使用的关键字。

⬆ 返回顶部 回到第150题


181.你如何检测浏览器语言首选项?

您可以使用导航器对象来检测浏览器语言首选项,如下所示,

 var language = navigator.languages && navigator.languages[0] || // Chrome / Firefox
                navigator.language ||   // All browsers
                navigator.userLanguage; // IE <= 10

 console.log(language);
复制代码

⬆ 返回顶部 回到第150题


182.如何使用javascript将字符串转换为标题大小写?

标题大小写意味着每个单词的第一个字母大写。您可以使用以下函数将字符串转换为标题大小写,

 function toTitleCase(str) {
     return str.replace(
         /\w\S*/g,
         function(txt) {
             return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
         }
     );
 }
 toTitleCase("good morning csdn"); // Good Morning Csdn
复制代码

⬆ 返回顶部 回到第150题


183.你如何检测页面中禁用的javascript?

您可以使用该标签来检测 javascript 是否禁用。当 JavaScript 被禁用时,里面的代码块会被执行,并且通常用于在 JavaScript 生成页面时显示替代内容。

 <script type="javascript">
     // JS相关代码放这里
 </script>
 <noscript>
     <a href="next_page.html?noJS=true">JavaScript is disabled in the page. Please click Next Page</a>
 </noscript>
复制代码

⬆ 返回顶部 回到第150题


184.javascript支持的各种运算符有哪些?

运算符能够操纵(数学和逻辑计算)某个值或操作数。JavaScript 支持的各种运算符如下,

  • 算术运算符:包括 +(加法)、–(减法)、*(乘法)、/(除法)、%(模数)、++(增量)和 – –(减量)
  • 比较运算符:包括 ==(等于)、!=(不等于)、===(与类型相等)、>(大于)、>=(大于或等于)、<(小于)、<= (小于或等于)
  • 逻辑运算符:包括 &&(逻辑与)、||(逻辑或)、!(逻辑非)
  • 赋值运算符:包括 =(赋值运算符)、+=(加法和赋值运算符)、–=(减法和赋值运算符)、*=(乘法和赋值)、/=(除法和赋值)、%=(模块和赋值) )
  • 三元运算符:它包括条件(:?)运算符
  • typeof 运算符:用于查找变量的类型。语法看起来像typeof variable

⬆ 返回顶部 回到第150题


185.什么是rest 参数?

Rest 参数是一种处理函数参数的改进方法,它允许我们将无限数量的参数表示为数组。语法如下,

 function f(a, b, ...theArgs) {
   // ...
 }
复制代码

例如,让我们举一个 sum 示例来计算动态参数数量,

 function total(…args){
 let sum = 0;
 for(let i of args){
 sum+=i;
 }
 return sum;
 }
 console.log(fun(1,2)); //3
 console.log(fun(1,2,3)); //6
 console.log(fun(1,2,3,4)); //13
 console.log(fun(1,2,3,4,5)); //15
复制代码

==注意==:在 ES2015 或 ES6 中添加了 Rest 参数

⬆ 返回顶部 回到第150题


186.如果不使用 rest 参数作为最后一个参数会发生什么?

rest 参数应该是最后一个参数,因为它的工作是将所有剩余的参数收集到一个数组中。例如,如果你定义一个像下面这样的函数,它没有任何意义并且会抛出一个错误。

 function someFunc(a,…b,c){
 //你的代码在这里
 return;
 }
复制代码

⬆ 返回顶部 回到第150题


187.什么是 JavaScript 中可用的按位运算符?

下面是 JavaScript 中使用的按位逻辑运算符列表

1.按位与 ( & ) 2.按位或 ( | ) 3.按位异或 (^) 4.按位非 ( ~ ) 5.左移 (<<) 6.符号传播右移 ( >> ) 7.零填充右移 ( >>> )

⬆ 返回顶部 回到第150题


188.什么是spread operator(展开运算符)?

展开运算符允许将可迭代对象(数组/对象/字符串)扩展为单个参数/元素。让我们举个例子来看看这个行为,

 function calculateSum(x, y, z) {
   return x + y + z;
 }

 const numbers = [1, 2, 3];

 console.log(calculateSum(...numbers)); // 6
复制代码

⬆ 返回顶部 回到第150题


189.你如何确定对象是否被冻结?

Object.isFrozen() 方法用于确定对象是否被冻结。如果以下所有条件都成立,则对象被冻结,

1.如果不能扩展。 2.如果它的所有属性都是不可配置的。 3.如果它的所有数据属性都是不可写的。用法如下,

 const object = {
    property: 'Welcome JS world'
 };
 Object.freeze(object);
 console.log(Object.isFrozen(object));
复制代码

⬆ 返回顶部 回到第150题


190.你如何确定两个值相同或不使用对象?

Object.is() 方法确定两个值是否相同。例如,不同类型值的用法是,

 Object.is('hello', 'hello');     // true
 Object.is(window, window);   // true
 Object.is([], []) // false
复制代码

如果以下条件之一成立,则两个值相同:

1.两者都未定义 2.都为空 3.都是真的还是假的 4.相同长度的两个字符串以相同的顺序具有相同的字符 5.两个相同的对象(意味着两个对象具有相同的引用) 6.两个数字和两个 +0 两个 -0 两个 NaN 都是非零和都不是 NaN 并且两者都具有相同的值。

⬆ 返回顶部 回到第150题


191.使用Object 的 is方法的目的是什么?

Object 的 is 方法的一些应用如下,

1.它用于比较两个字符串。 2.它用于比较两个数字。 3.它用于比较两个数字的极性。 4.它用于比较两个对象。

⬆ 返回顶部 回到第150题


192.如何将属性从一个对象复制到另一个对象?

您可以使用 Object.assign() 方法将值和属性从一个或多个源对象复制到目标对象。它返回具有从目标对象复制的属性和值的目标对象。语法如下,

 Object.assign(target, ...sources)
复制代码

让我们以一个源和一个目标对象为例,

 const target = { a: 1, b: 2 };
 const source = { b: 3, c: 4 };
 const returnedTarget = Object.assign(target, source);
 console.log(target); // { a: 1, b: 3, c: 4 }
 console.log(returnedTarget); // { a: 1, b: 3, c: 4 }
复制代码

正如在上面的代码中所观察到的,b从源到目标有一个共同的 property( ),因此它的值已被覆盖。

⬆ 返回顶部 回到第150题


193.赋值方法有哪些应用?

下面是 Object.assign() 方法的一些主要应用,

  • 它用于克隆对象。
  • 它用于合并具有相同属性的对象。

⬆ 返回顶部 回到第150题


194.什么是Proxy(代理)对象?

Proxy 对象用于定义基本操作的自定义行为,例如属性查找、赋值、枚举、函数调用等。语法如下:

 var p = new Proxy(target, handler);
复制代码

让我们以代理对象为例,

 var handler = {
     get: function(obj, prop) {
         return prop in obj ?
             obj[prop] :
             100;
     }
 };

 var p = new Proxy({}, handler);
 p.a = 10;
 p.b = null;

 console.log(p.a, p.b); // 10, null
 console.log('c' in p, p.c); // false, 100
复制代码

在上面的代码中,它使用get处理程序定义代理在其上执行操作时的行为

⬆ 返回顶部 回到第150题


195.seal 方法的目的是什么?

所述Object.seal()方法被用于密封一个对象,通过防止从被添加到它的新属性和标记所有现有的性质不可配置的。但是当前属性的值仍然可以更改,只要它们是可写的。让我们看下面的例子来了解更多关于 Seal() 方法的信息

  const object = {
     property: 'Welcome JS world'
  };
  Object.seal(object);
  object.property = 'Welcome to object world';
  console.log(Object.isSealed(object)); // true
  delete object.property; // You cannot delete when sealed
  console.log(object.property); //Welcome to object world
复制代码

⬆ 返回顶部 回到第150题


196.seal 方法的应用有哪些?

下面是 Object.seal() 方法的主要应用,

  • 它用于密封对象和数组。
  • 它用于使对象不可变。

⬆ 返回顶部 回到第150题


197.freeze 和 seal 方法有什么区别?

如果使用 Object.freeze() 方法冻结对象,则其属性将变为不可变且无法对其进行更改,而如果使用 Object.seal() 方法密封对象,则可以在现有属性中进行更改的对象。

⬆ 返回顶部 回到第150题


198.如何判断物体是否 seal?

Object.isSealed() 方法用于确定对象是否已密封。如果以下所有条件都成立,则对象被密封

1.如果不能扩展。 2.如果它的所有属性都是不可配置的。 3.如果它不可移动(但不一定不可写)。让我们在行动中看到它

 const object = {
 property: 'Hello, Good morning'
 };

 Object.seal(object); // 使用 Seal() 方法密封对象

 console.log(Object.isSealed(object));      // 检查对象是否密封
复制代码

⬆ 返回顶部 回到第150题


199.如何获得可枚举的键值对?

Object.entries() 方法用于返回给定对象自己的可枚举字符串键控属性 [key, value] 对的数组,其顺序与 for...in 循环提供的顺序相同。让我们在一个例子中看看 object.entries() 方法的功能,

 const object = {
   a: 'Good morning',
   b: 100
 };

 for (let [key, value] of Object.entries(object)) {
   console.log(`${key}: ${value}`); // a: 'Good morning'
                                    // b: 100
 }
复制代码

注意:顺序不保证为对象定义。

⬆ 返回顶部 回到第150题


200.Object.values 和 Object.entries 方法的主要区别是什么?

Object.values() 方法的行为类似于 Object.entries() 方法,但它返回一个值数组而不是 [key,value] 对。

  const object = {
    a: 'Good morning',
    b: 100
  };

  for (let value of Object.values(object)) {
    console.log(`${value}`); // 'Good morning'
                                 100
  }
复制代码