50个JavaScript面试和解答(收藏)
问题1:Java和JavaScript有什么不同
Java | JavaScript |
Java是一种OOP编程语言。 | JavaScript是一种OOP脚本语言。 |
它创建在虚拟机或浏览器中运行的应用程序。 | 代码在浏览器或node环境上运行。 |
需要编译Java代码。 | JS代码都是文本的形式。 |
问题2:什么 Javascript
JavaScript 是一种轻量级的解释型编程语言,具有面向对象的特性,允许各位在其他静态HTML页面中构建交互性。 该语言的通用核心已嵌入Netscape,Internet Explorer和其他Web浏览器中。
推荐相关文章:2020年最全js面试题整理(最新)
问题3: JS 支持哪些数据类型
JS 支持的数据类型:
● Undefined
● Null
● Boolean
● String
● Symbol
● Number
● Object
问题4:JavaScript的特性是什么
以下是JS的特性:
● JS 是一种轻量级,解释性编程语言。
● 为了创建以网络为中心的应用程序而设计。
● 补充和集成了 Java
● 补充和集成了 HTML
● 开放和跨平台
问题5:JavaScript是区分大小写
是的,JS是一种区分大小写的语言。关键字、变量、函数名和任何其他标识符必须始终使用一致的大写字母进行使用。
问题6:JS 的优势是什么
以下使用JS的优点:
● 更少的服务器交互 - 在将页面发送到服务器之前,可以验证用户输入,节省了服务器流量,意味着服务器的负载更少
● 立即反馈 - 用户不需要等待页面重新加载来查看是否忘记输入某些内容。
● 增强交互 - 在界面中,当用户使用鼠标悬停或通过键盘激活它们时会做出响应。
● 丰富的接口 - 可以使用JS包含拖放组件和滑块等项,为网站提供丰富的界面。
问题7:如何用JS创建对象
JS贼支持对象概念,用如下方式创建即可:
var emp = { name: "Daniel", age: 23 };
问题8:如何用JS创建数组
JS 创建数组也很简单:
var x = []; var y = [1, 2, 3, 4, 5];
问题9:JS 中的命名函数是什么以及如何定义:
命名函数在定义后立即声明名称,可以使用function
关键字定义:
function named(){ // write code here }
问题10:是否可以将匿名函数分配给变量并将其作为参数传递给另一个函数
可以。一个匿名函数可以分配给一个变量,它也可以作为参数传递给另一个函数。
问题11:JS中的参数对象是什么&如何获得传递给函数的参数类型
JS 变量arguments
表示传递给函数的参数。 使用typeof
运算符,可以获得传递给函数的参数类型。如下:
function func(x){ console.log(typeof x, arguments.length); } func(); //==> "undefined", 0 func(7); //==> "number", 1 func("1", "2", "3"); //==> "string", 3
问题12:JS中变量的作用域是什么
变量的作用域是程序中定义它的区域,JS变量只有两个作用域:
● 全局变量 - 全局变量具有全局作用域,这意味着它在JS代码中的任何位置都可见。
● 局部变量 - 局部变量仅在定义它的函数中可见,函数参数始终是该函数的本地参数。
问题13:JS 中“this
”运算符的用途是什么?
this
关键字引用它所属的对象。 根据使用位置,它具有不同的值。 在方法中,这指的是所有者对象,而在函数中,这指的是全局对象。
问题14:什么是回调
回调函数是作为参数或选项传递给某个方法的普通JS函数。它是一个函数,在另一个函数完成执行后执行,因此称为回调。在JS中,函数是对象,因此,函数可以接受函数作为参数,并且可以由其他函数返回。
问题15:什么是闭包?举个例子
只要在某个内部作用域内访问在当前作用域之外定义的变量,就会创建闭包。 它允许你从内部函数访问外部函数的作用域。 在JS中,每次创建函数时都会创建闭包。 要使用闭包,只需在另一个函数内定义一个函数并暴露它。
问题16:列出一些内置方法及其返回的值。
内置方法 | 返回值 |
CharAt() | 它返回指定索引处的字符。 |
Concat() | 它连接两个或多个字符串。 |
forEach() | 它为数组中的每个元素调用一个函数。 |
indexOf() | 它返回指定值第一次出现时调用字符串对象中的索引。 |
pop() | 它从数组中删除最后一个元素并返回该元素。 |
push() | 它将一个或多个元素添加到数组的末尾,并返回数组的新长度。 |
reverse() | 反转数组元素的顺序。 |
问题17: JS中的变量命名约定是什么?
在JS中命名变量时要遵循以下规则:
- 咱们不应该使用任何JS保留关键字作为变量名。例如,
break
或boolean
变量名无效。 - JS 变量名不应该以数字
(0-9)
开头。它们必须以字母或下划线开头。例如,123name
是一个无效的变量名,但123name
或name123
是一个有效的变量名。 - JS 变量名区分大小写。例如,
Test
和test
是两个不同的变量。
问题18:TypeOf 运算符是如何工作的
typeof
运算符用于获取其操作数的数据类型。 操作数可以是文字或数据结构,例如变量,函数或对象。 它是一个一元运算符,放在它的单个操作数之前,可以是任何类型。 它的值是一个字符串,表示操作数的数据类型。
问题19:如何使用 JS 创建 cookie
创建cookie
的最简单方法是为document.cookie
对象分配一个字符串值,如下所示:
document.cookie = "key1 = value1; key2 = value2; expires = date";
问题20:如何使用JS读取cookie
读取cookie
就像写入cookie
一样简单,因为document.cookie
对象的值是cookie
。
● document.cookie
的值是由分号分隔的name=value
对的列表,其中name
是cookie的名称,value
是其字符串值。
● 可以使用split()
方法将字符串分解为键和值。
问题21:如何使用 JS 删除 cookie
如果要删除cookie
以便后续尝试读取cookie
,则只需将过期日期设置为过去的时间。 咱们应该定义cookie
路径以确保删除正确的cookie
。 如果未指定路径,某些浏览器将不允许咱们删除cookie
。
问题22:Attribute 和Property之间有什么区别
● Attribute——提供关于元素的更多细节,如id、类型、值等。
● Property —— 分配给属性的值,如type =“text”
,value ='Name'
等。
问题23:列出在JS代码中访问HTML元素的不同方式
下面是在JS代码中访问 html 元素的方法列表:
● getElementById(‘idname’): 按id
名称获取元素
● getElementsByClass(‘classname’): 获取具有给定类名的所有元素
● getElementsByTagName(‘tagname’): 获取具有给定标记名称的所有元素
● querySelector(): 此函数采用css样式选择器并返回第一个选定元素
问题24:JS代码在HTML文件中可以以多少种方式使用
主要有三种:
● 行内
● 内部
● 外部
行内方式:
... <input type="button" value="点击有惊喜" onclick="javascript:alert(&#39;哈哈哈哈&#39;)"> ...
内部方式:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <script type="text/javascript"> //声明一个函数(整个文档都可以使用) function surprise() { alert('恭喜你中了一百万')/*弹出框*/ } </script> </head> 。。。 </html>
外部方式:
... <!--很多html页面都可以调用js4.js页面--> <script src="../../js/js4.js" type="text/javascript" charset="utf-8"> ...
问题25:在JS中定义变量的方法有哪些
在 JS 中声明变量有三种方式:
● var – var
语句用于声明一个变量,咱们可以选择初始化该变量的值。例子:var a =10;
变量声明在代码执行之前处理。
● const - 常量的值不能通过重新赋值来改变,并且不能重新声明。
● let - 语句声明一个块级作用域的本地变量,并且可选的将其初始化为一个值。
问题26:什么是类型化语言
类型化语言中,值与值关联,而不是与变量关联,它有两种类型:
-
动态:在这种情况下,变量可以包含多种类型,如在JS中,变量可以取
number
,string
类型。 - 静态:在这种情况下,变量只能包含一种类型,就像在Java中声明为
string
的变量只能包含一组字符,不能包含其他类型。
问题27:Cookie 与 Local storage 与 Session storage 区别
特性 | Cookie | localStorage | sessionStorage |
数据的生命期 | 一般由服务器生成,可设置失效时间。如果在浏览器端生成Cookie,默认是关闭浏览器后失效 | 除非被清除,否则永久保存 | 仅在当前会话下有效,关闭页面或浏览器后被清除 |
存放数据大小 | 4K左右 | 一般为 5MB | |
与服务器端通信 | 每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题 | 仅在客户端(即浏览器)中保存,不参与和服务器的通信 | |
易用性 | 需要程序员自己封装,源生的Cookie接口不友好 | 需要程序员自己封装,源生的Cookie接口不友好 源生接口可以接受,亦可再次封装来对Object和Array有更好的支持 |
问题28: ‘==‘ 和 ‘===‘ 区别
==
: 两边值类型不同的时候,要先进行类型转换,再比较。 ===
:不做类型转换,类型不同的一定不等。
一言以蔽之:==
先转换类型再比较,===
先判断类型,如果不是同一类型直接为false
。
问题29:null 和 undefined 区别
undefined
是基本数据类型 表示未定义 缺少的意思。
null
是引用数据类型,是对象,表示空对象
undefined
是从null
派生出来的 所以undefined==null
为 true
问题 30:undeclared 和 undefined 区别?
undeclared
的变量是程序中不存在且未声明的变量。 如果程序尝试读取未声明变量的值,则会遇到运行时错误。undefined的变量是在程序中声明但未赋予任何值的变量,如果程序试图读取未定义变量的值,则返回undefined
的值。
问题 31: 列出一些JS框架
JS框架是用JavaScript编写的应用程序框架,它与控制流中的JS库不同,一些最常用的框架是:
● Vue
● Angular
● React
问题 32: window 与 document 的区别:
window:JS 的 window 是一个全局对象,它包含变量、函数、history
、location
。
document:document
也位于window
之下,可以视为window
的属性。
问题 33: innerHTML 和 innerText 的区别
innerHTML:也就是从对象的起始位置到终止位置的全部内容,包括Html标签。
innerText:从起始位置到终止位置的内容, 但它去除Html标签
问题 34:JS中的事件冒泡是什么
事件冒泡是HTML DOM API中事件传播的一种方式,当一个事件发生在另一个元素中的一个元素中,并且两个元素都注册了该事件的句柄时。通过冒泡,事件首先由最内部的元素捕获和处理,然后传播到外部元素。执行从该事件开始,并转到其父元素。然后执行传递给父元素,以此类推,直到body元素。
问题 35:NaN 是什么
NaN
即非数值(Not a Number),NaN
属性用于引用特殊的非数字值,该属性指定的并不是不合法的数字。
NaN
属性 与 Number.Nan
属性相同。
提示: 请使用 isNaN()
来判断一个值是否是数字。原因是 NaN
与所有值都不相等,包括它自己。
问题 36:JS的原始/对象类型如何在函数中传递?
两者之间的一个区别是,原始数据类型是通过值传递的,对象是通过引用传递的。
● 值传递:意味着创建原始文件的副本。把它想象成一对双胞胎:他们出生的时候一模一样,但是双胞胎中的老大在战争中失去了一条腿,而老二却没有。
● 引用传递: 意味着创建原始文件的别名。当我妈妈叫沙雕的时候,虽然我的名字叫小智,但这并不是说我就突然就克隆了一个自己:我仍然是我,只是可以用不同名字来称呼我而已。
问题 37:如何在JS中将任意基的字符串转换为整数
parseInt(string, radix)
将一个字符串 string
转换为 radix
进制的整数, radix 为介于2-36
之间的数,如下:
parseInt("4F", 16)
问题 38:2+5+ '3'的结果是什么
由于2
和5
是整数,它们将以数字形式相加。因为3
是一个字符串,它将与 7
拼接,结果是73。
问题 39:export 和 import 是什么
import
和export
有助于咱们编写模块化JS代码。 使用import
和export
,咱们可以将代码拆分为多个文件,如下:
//------ lib.js ------</span> export const sqrt = Math.sqrt;</span> export function square(x) {</span> return x * x;</span> } export function diag(x, y) { return sqrt(square(x) + square(y)); } //------ main.js ------</span> { square, diag } from 'lib'; console.log(square(5)); // 25 console.log(diag(4, 3)); // 5
问题40:JS中的“严格”模式是什么以及如何启用?
严格模式是在代码中引入更好的错误检查的一种方法。
● 当使用严格模式时,不能使用隐式声明的变量,或为只读属性赋值,或向不可扩展的对象添加属性。
● 可以通过在文件,程序或函数的开头添加“use strict”
来启用严格模式
问题41:JS 中的 prompt 框是什么
提示框是允许用户通过提供文本框输入输入的框。 prompt()
方法显示一个对话框,提示访问者输入。 如果您希望用户在输入页面之前输入值,则通常会使用提示框。 弹出提示框时,用户必须在输入输入值后单击“确定”或“取消”才能继续。
问题42:下面代码的输出是什么?
var Y = 1; if (eval(function f(){})) { y += typeof F; } console.log(y);
打印1undefined
。if
条件语句使用eval
求值,因此eval(function f(){})
返回函数f(){}
(为真)。因此,在if
语句中,执行typeof f
返回undefined,因为if
语句代码在运行时执行,而if
条件中的语句在运行时计算。
问题43:call 和 apply有什么区别
call
和apply
可以用来重新定义函数的执行环境,也就是this
的指向;call
和apply
都是为了改变某个函数运行时的context
,即上下文而存在的,换句话说,就是为了改变函数体内部this
的指向。
call()
调用一个对象的方法,用另一个对象替换当前对象,可以继承另外一个对象的属性,它的语法是:
Function.call(obj[, param1[, param2[, [,...paramN]]]]);
说明:call
方法可以用来代替另一个对象调用一个方法,call
方法可以将一个函数的对象上下文从初始的上下文改变为obj
指定的新对象,如果没有提供obj
参数,那么Global
对象被用于obj
apply()
和call()
方法一样,只是参数列表不同,语法:
Function.apply(obj[, argArray]);
说明:如果argArray
不是一个有效数组或不是arguments
对象,那么将导致一个TypeError
,如果没有提供argArray
和obj
任何一个参数,那么Global
对象将用作obj。
问题44:如何在JS中清空数组
有许多方法可以用来清空数组:
方法一:
arrayList = []
上面的代码将把变量arrayList
设置为一个新的空数组。如果在其他任何地方都没有对原始数组arrayList
的引用,则建议这样做,因为它实际上会创建一个新的空数组。咱们应该小心使用这种清空数组的方法,因为如果你从另一个变量引用了这个数组,那么原始的引用数组将保持不变。
方法二:
arrayList.length = 0;
上面的代码将通过将其length
设置为0
来清除现有数组。这种清空数组的方式还会更新指向原始数组的所有引用变量。 因此,当你想要更新指向arrayList
的所有引用变量时,此方法很有用。
方法三:
arrayList.splice(0, arrayList.length);
这处方法也行,当然这种清空数组的方法也将更新对原始数组的所有引用。
方法四:
while(arrayList.length) { arrayList.pop(); }
上面的实现也可以空数组,但通常不建议经常使用这种方式。
问题45:以下代码的输出什么
var output = (function(x) { delete x; return x; } )(0); console.log(output);
打印 0
。delete
操作符用于从对象中删除属性。这里x
不是一个对象,而是一个局部变量,删除操作符不影响局部变量。
问题46:以下代码的输出什么
var X = { foo : 1}; var output = (function() { delete X.foo; return X.foo; } )(); console.log(output);
输出 undefined
。delete
操作符用于删除对象的属性。X
是一个具有foo
属性的对象,由于它是一个自调用函数,所以咱们将从对象X
中删除foo
属性。这样做之后,当咱们试图引用一个被删除的foo
属性时,结果是undefined
。
问题47:以下代码的输出什么
var foo = function Bar() { return 7; }; typeof Bar();
输出将是引用错误
。函数定义只能有一个引用变量作为其函数名。
问题49:为什么要将JS源文件的全部内容包装在一个函数中
这是一种越来越普遍的做法,被许多流行的JS库所采用。 这种技术围绕文件的整个内容创建一个闭包,最重要的是,它可以创建一个私有命名空间,从而有助于避免不同JS模块和库之间潜在的名称冲突。
该技术的另一个特性是允许为全局变量提供一个简单的别名,这在jQuery插件中经常使用。
问题50:JS中的转义字符是什么
JS转义字符使咱们能够在不破坏应用程序的情况下编写特殊字符。转义字符(\
)用于处理特殊字符,如单引号、双引号、撇号和&
号,在字符前放置反斜杠使其显示。
如:document.write("I am a \"good\" boy")
原文:https://hackr.io/blog/javascript-interview-questions
为了保证的可读性,本文采用意译而非直译。
相关学习推荐:javascript视频教程
Atas ialah kandungan terperinci 50个JavaScript面试和解答(收藏). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

PHP dan Vue: gandingan sempurna alat pembangunan bahagian hadapan Dalam era perkembangan pesat Internet hari ini, pembangunan bahagian hadapan telah menjadi semakin penting. Memandangkan pengguna mempunyai keperluan yang lebih tinggi dan lebih tinggi untuk pengalaman tapak web dan aplikasi, pembangun bahagian hadapan perlu menggunakan alat yang lebih cekap dan fleksibel untuk mencipta antara muka yang responsif dan interaktif. Sebagai dua teknologi penting dalam bidang pembangunan bahagian hadapan, PHP dan Vue.js boleh dianggap sebagai alat yang sempurna apabila digandingkan bersama. Artikel ini akan meneroka gabungan PHP dan Vue, serta contoh kod terperinci untuk membantu pembaca memahami dan menggunakan kedua-dua ini dengan lebih baik.

Tutorial JavaScript: Bagaimana untuk mendapatkan kod status HTTP, contoh kod khusus diperlukan: Dalam pembangunan web, interaksi data dengan pelayan sering terlibat. Apabila berkomunikasi dengan pelayan, kami selalunya perlu mendapatkan kod status HTTP yang dikembalikan untuk menentukan sama ada operasi itu berjaya dan melaksanakan pemprosesan yang sepadan berdasarkan kod status yang berbeza. Artikel ini akan mengajar anda cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan menyediakan beberapa contoh kod praktikal. Menggunakan XMLHttpRequest

Sebagai bahasa pengaturcaraan yang pantas dan cekap, bahasa Go popular secara meluas dalam bidang pembangunan bahagian belakang. Walau bagaimanapun, beberapa orang mengaitkan bahasa Go dengan pembangunan bahagian hadapan. Malah, menggunakan bahasa Go untuk pembangunan bahagian hadapan bukan sahaja boleh meningkatkan kecekapan, tetapi juga membawa ufuk baharu kepada pembangun. Artikel ini akan meneroka kemungkinan menggunakan bahasa Go untuk pembangunan bahagian hadapan dan memberikan contoh kod khusus untuk membantu pembaca memahami dengan lebih baik bahagian ini. Dalam pembangunan front-end tradisional, JavaScript, HTML dan CSS sering digunakan untuk membina antara muka pengguna

Django ialah rangka kerja aplikasi web yang ditulis dalam Python yang menekankan pembangunan pesat dan kaedah bersih. Walaupun Django ialah rangka kerja web, untuk menjawab soalan sama ada Django ialah front-end atau back-end, anda perlu mempunyai pemahaman yang mendalam tentang konsep front-end dan back-end. Bahagian hadapan merujuk kepada antara muka yang pengguna berinteraksi secara langsung, dan bahagian belakang merujuk kepada program bahagian pelayan Mereka berinteraksi dengan data melalui protokol HTTP. Apabila bahagian hadapan dan bahagian belakang dipisahkan, program bahagian hadapan dan bahagian belakang boleh dibangunkan secara bebas untuk melaksanakan logik perniagaan dan kesan interaktif masing-masing, dan pertukaran data.

Pengenalan kepada kaedah mendapatkan kod status HTTP dalam JavaScript: Dalam pembangunan bahagian hadapan, kita selalunya perlu berurusan dengan interaksi dengan antara muka bahagian belakang, dan kod status HTTP adalah bahagian yang sangat penting daripadanya. Memahami dan mendapatkan kod status HTTP membantu kami mengendalikan data yang dikembalikan oleh antara muka dengan lebih baik. Artikel ini akan memperkenalkan cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan memberikan contoh kod khusus. 1. Apakah kod status HTTP bermakna kod status HTTP apabila penyemak imbas memulakan permintaan kepada pelayan, perkhidmatan tersebut

Dalam temu bual pembangunan bahagian hadapan, soalan lazim merangkumi pelbagai topik, termasuk asas HTML/CSS, asas JavaScript, rangka kerja dan perpustakaan, pengalaman projek, algoritma dan struktur data, pengoptimuman prestasi, permintaan merentas domain, kejuruteraan bahagian hadapan, corak reka bentuk, dan teknologi dan trend baharu. Soalan penemuduga direka bentuk untuk menilai kemahiran teknikal calon, pengalaman projek dan pemahaman tentang trend industri. Oleh itu, calon harus bersedia sepenuhnya dalam bidang ini untuk menunjukkan kebolehan dan kepakaran mereka.

Django: Rangka kerja ajaib yang boleh mengendalikan pembangunan bahagian hadapan dan belakang! Django ialah rangka kerja aplikasi web yang cekap dan berskala. Ia mampu menyokong berbilang model pembangunan web, termasuk MVC dan MTV, dan boleh membangunkan aplikasi web berkualiti tinggi dengan mudah. Django bukan sahaja menyokong pembangunan bahagian belakang, tetapi juga boleh membina antara muka bahagian hadapan dengan cepat dan mencapai paparan paparan yang fleksibel melalui bahasa templat. Django menggabungkan pembangunan bahagian hadapan dan pembangunan bahagian belakang menjadi penyepaduan yang lancar, supaya pembangun tidak perlu pakar dalam pembelajaran

Gabungan teknologi Golang dan bahagian hadapan: Untuk meneroka bagaimana Golang memainkan peranan dalam bidang bahagian hadapan, contoh kod khusus diperlukan Dengan perkembangan pesat Internet dan aplikasi mudah alih, teknologi bahagian hadapan telah menjadi semakin penting. Dalam bidang ini, Golang, sebagai bahasa pengaturcaraan bahagian belakang yang berkuasa, juga boleh memainkan peranan penting. Artikel ini akan meneroka cara Golang digabungkan dengan teknologi bahagian hadapan dan menunjukkan potensinya dalam bidang bahagian hadapan melalui contoh kod khusus. Peranan Golang dalam bidang front-end adalah sebagai cekap, ringkas dan mudah dipelajari
