前端面试题之JavaScript篇

1. js是什么,有什么特点?

1.js是一种解释性脚本语言(代码不进行预编译

2、跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如Windows、Linux、Mac、Android、iOS等)。

3、弱类型脚本语言

对使用的数据类型未做出严格的要求,可以进行类型转换,简单又灵活。

4、单线程,事件驱动

JavaScript对用户的响应,是以事件驱动的方式进行的。在网页(Web   Page)中执行了某种操作所产生的动作,被称为“事件”(Event)。例如按下鼠标、移动窗口、选择菜单等都可以被视为事件。当事件发生后,可能会引起相应的事件响应,执行某些对应的脚本,这种机制被称为“事件驱动”。

5、面向对象

一种基于对象的脚本语言,这意味着JavaScript能运用其已经创建的对象。因此,许多功能可以来自于脚本环境中对象的方法与脚本的相互作用。

6、安全性

JavaScript是一种安全性语言,它不允许访问本地的硬盘,并不能将数据存入到服务器上,不允许对网络文档进行修改和删除,只能通过浏览器实现信息浏览或动态交互。从而有效地防止数据的丢失。

2. 基本数据类型有哪些?(可选 let,const,var的区别? 变量提升? 暂时性死区?)

函数提升优先于变量提升,函数提升会把整个函数挪到作用域顶部,变量提升只会把声明挪到作用域顶部

var 存在提升,我们能在声明之前使用。 let 、 const 因为暂时性死区的原因,不能在声明前使用

var 在全局作用域下声明变量会导致变量挂载在 window 上,其他两者不会

let 和 const 作用基本一致,但是后者声明的变量不能再次赋值

3. 数据存储——堆栈是什么?

堆栈是一种执行“后进先出”算法的数据结构。它是在内存中开辟一个存储区域,数据一个一个顺序地存入(也就是“压入——push”)这个区域之中。有一个地址指针总指向最后一个压入堆栈的数据所在的数据单元,存放这个地址指针的寄存器就叫做堆栈指示器。开始放入数据的单元叫做“栈底”。数据一个一个地存入,这个过程叫做“压栈”。在压栈的过程中,每有一个数据压入堆栈,就放在和前一个单元相连的后面一个单元中,堆栈指示器中的地址自动加1。读取这些数据时,按照堆栈指示器中的地址读取数据,堆栈指示器中的地址数自动减1。这个过程叫做“弹出pop”。如此就实现了后进先出的原则。 堆栈是计算机中最常用的一种数据结构,比如函数的调用在计算机中是用堆栈实现的。 堆栈可以用数组存储,也可以用以后会介绍的链表存储。

4. 阅读代码,判断结果,为什么?"11" + 2 - "3"等于109?

当“+”号两边有一边是字符串时,此时“+”号为连接符;“- * /”运行时,系统会默认判断是不是非数字类型,然后进行自动类型转换并计算

5. break/continue的区别?

break: 结束当前循环并退出当前循环体。break还可以退出switch语句

continue: 循环体中后续的语句不执行,但是循环没有结束,继续进行循环条件的判断(for循环还会i++)。continue只是结束本次循环

6. ==和===的区别?

==用于一般比较,===用于严格比较,==在比较的时候可以转换数据类型,===严格比较,只要类型不匹配就返回flase。

7. 0,{},[],"",undefind,null,0,1,-1 是true还是false?

 [ ] //true

 { } //true

 -1 // true

 " " //false

 0 //false

 undefined //false

 null//false

8. 值传递与引用传递有什么区别?

值传递:

       (形式参数类型是基本数据类型和String):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

引用传递: (形式参数类型是引用数据类型参数除去String):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

9.var a = 100;function f(a) {    a -= 10;}f(a);console.log(a);(可选 return与yield的区别?)

return和yield的异同

共同点:return和yield都用来返回值;在一次性地返回所有值场景中return和yield的作用是一样的。

不同点:如果要返回的数据是通过for等循环生成的迭代器类型数据(如列表、元组),return只能在循环外部一次性地返回,yeild则可以在循环内部逐个元素返回。

10.xxx(math,date,string,array,json,object)对象,都有哪些常用属性和方法以及什么用?

Math对象

1.Math.PI 圆周率

2.Math.ceil 向上取整

3.Math.floor() 向下取整

4.Math.round(num) 四舍五入

5.Math.max(x,y...)返回最大值

Math.min(x,y...)返回最小值

6.Math.pow() 幂次方

7.Math.abs() 绝对值

8.Math.random() 随机数,默认取(0,1)

Date对象

1.getFullYear();获取年份

2.getMonth()+1;获取月份,从0开始,要加1

3.getDate();获取天份

4.getHours();获取小时,是24小时制

5.getMinutes();获取分钟

6.getSeconds();获取秒

7.getMilliseconds();获取毫秒

8.getDay();获取星期 【0-6】星期日为0

9.偏移量

getYear();距离1900年过了多久年;

getTime();距离1970年过了多少毫秒;

10.

toLocaleDateString();将本地年,月,日转换为字符串类型输出

toLocaleTimeString();将本地时,分,秒转换为字符串类型输出   12小时制

toLocaleString();将本地时间转换为字符串类型输出(年,月,日,时,分,秒)

String对象

2.indexOf(参数1,参数2);下标从零开始

3.substr(参数1,参数2);下标从零开始

4.substring(参数1,参数2)从参数1截取到参数2的前一个字符

5. replace(参数1,参数2) ;替换

strObj.split("参数1",参数2); :分割符   返回值:数组

strObj.lastIndexOf(参数1,参数2)  查找子串   返回值:如果找到返回子串位置, 如果找不到返回-1;

strObj.charAt(参数)  根据索引号查找子串   返回值:子串

match(); 可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。   返回值:检索到的值

Array对象

forEach();遍历数组

map();映射

filter();过滤

reduce();迭代

shift();删除第一个元素   返回值:被删除的元素

pop();删除最后一个元素   返回值:被删除的元素

unshift();在头部添加元素

push();在尾部添加元素

splice()添加并删除

concat()连接数组

排序  sort(参数);

reverse()颠倒数组中的元素顺序

join()分割数组

slice(参数1,参数2);选定/截取数组

JSON对象

反序列化   JSON.stringify(参数) 把json格式转换为字符串

序列化   JSON.parse(参数) 把字符串转换为json格式

Object对象

一、属性

 Object自带一个prototype的属性,即Object.prototype,Object.prototype本身也是一个对象,也会有一些属性和方法。

 1、属性 Object.prototype.writable:默认为false 

Object.prototype.enumerable:默认为false 

Object.prototype.configurable:默认为false

Object.prototype.constructor:用于创建一个对象的原型

 2、常用方法 Object.prototype.hasOwnProperty():返回一个布尔值,表示某个对象是否含有指定的属性,而且此属性非原型链继承。

Object.prototype.isPrototypeOf():返回一个布尔值,表示指定的对象是否在本对象的原型链中。

Object.prototype.propertyIsEnumerable():判断指定属性是否可枚举。

Object.prototype.toString():返回对象的字符串表示。

Object.prototype.watch():给对象的某个属性增加监听。

Object.prototype.unwatch():移除对象某个属性的监听。

Object.prototype.valueOf():返回指定对象的原始值。

二、方法 

Object.assign(target, …sources):把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。

Object.create(proto,[propertiesobject]):创建一个拥有指定原型和若干个指定属性的对象。

Object.defineProperties(obj, props):在一个对象上添加或修改一个或者多个自有属性,并返回该对象。

11.json是什么数据格式,有什么作用?

json的作用(json是一种与语言无关的数据交换的格式)

使用ajax进行前后台数据交换

 移动端与服务端的数据交换

Json的格式

对象格式

数组/集合格式

12.xml,html,json有什么区别?

XML格式:

优点:

      XML 是一种通用的数据格式。

      不必把数据强加到已定义好的格式中,而是要为数据自定义合适的标记

      利用 DOM 可以完全掌控文档

缺点:

     如果文档来自于服务器,就必须得保证文档含有正确的首部信息。若文档类型不正确,那么 responseXML 的值将是空的

     当浏览器接收到长的 XML 文件后, DOM 解析可能会很复杂

JSON格式:

优点:

      作为一种数据传输格式,JSON 与 XML 很相似,但是它更加灵巧。

      JSON 不需要从服务器端发送含有特定内容类型的首部信息。

缺点:

      语法过于严谨

      代码不易读

      eval 函数存在风险

HTML格式:

优点:

    从服务器端发送的 HTML 代码在浏览器端不需要用 JavaScript 进行解析。

          HTML 的可读性好。

          HTML 代码块与 innerHTML 属性搭配,效率高。

缺点:若需要通过 AJAX 更新一篇文档的多个部分,HTML 不合适innerHTML 并非 DOM 标准。

13.局部作用域和全部作用域?

全局作用域:

  直接编写在 script 标签之中的JS代码,都是全局作用域;

  或者是一个单独的 JS 文件中的。

  全局作用域在页面打开时创建,页面关闭时销毁;

  在全局作用域中有一个全局对象 window(代表的是一个浏览器的窗口,由浏览器创建),可以直接使用。

局部作用域(函数作用域):

  在函数内部就是局部作用域,这个代码的名字只在函数的内部起作用

  调用函数时创建函数作用域,函数执行完毕之后,函数作用域销毁;

  每调用一次函数就会创建一个新的函数作用域,它们之间是相互独立的。

14.javascript 由哪几部分组成?

1.ECMAScript

ECMA组织标准,如函数,标签的定义,因为网景开发了JavaScript,一年后微软又开发了JScript,为了让JavaScript成为全球标准,所以几个公司组织制定了JavaScript语言的标准,被称为:ECMAScript标准或ECMA-262标准(European Computer Manufactruers Association)

2.DOM(document  object  model):W3C标准,主要针对文本内容标准的定义

3.BOM(browser  object  model):无组织定义标准,一般比较乱,主要针对浏览器

15.null,undefined的区别?

1、Null类型,代表空值,代表一个空对象指针,使用typeof运算得到object,所以可以认为它是一个特殊的对象值;

2、defined类型,当一个声明了一个变量未初始化时,得到的就是undefined;

3、undefined是访问一个未初始化的变量的返回值,而null是访问一个尚未存在的对象时所返回的值。因此,可以把undefined看作是空的变量,而null看作是空的对象

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值