前端面试经验(四)JavaScript

1.输出

windows.alert 窗口警告

console.log 控制台输出

document.getElementById("XXX").innerHTML("XXXX")

document.write()用在外部script将会覆盖,如果用在内部script在页面加载时一同加载,将会添加在页面标签后。

2.变量

重新声明某一javascript变量,变量的值不会丢失。

new关键字声明变量类型。

3.对象方法

如果要访问对象方法属性,它将作为一个定义函数的字符串返回。

4.函数

在函数内部声明的变量(使用var)是局部变量,只能在函数内部访问。

变量的生存期:全局变量会在页面关闭后被删除。局部变量在函数返回后被删除。

5.变量作用域

全局变量是window对象,在函数内未声明直接赋值创建全局变量。delete var1删除全局变量。

6.事件---DOM

可以直接把javascript代码写在事件双引号中。

7.遍历

for/in遍历对象属性。

标签与break,continue的使用:使用标签名加冒号来标记代码块。

break可用于switch语句和循环,continue只能用于循环。在二重循环中使用break来控制跳出哪一重循环。

8.typeof

null的类型为对象,undefined的类型为undefined。null与undefined值相等而类型不等,因此使用==与===有不同布尔结果。typeof用来查看数据类型。

可以使用constructor属性查看对象是否属于日期或者数组。

9.正则表达式使得搜索功能更加强大(如实例中不区分大小写)。

str.replace(被替换项-可以是正则表达式或者字符串,替换项)

str.search(字符串或者正则表达式) 正则表达式不需要双引号

10.错误

只有try代码块内抛出的异常可以被catch块拿到。

11.变量提升

函数声明与变量声明会被解释器提升到方法体的最顶部。只有变量会提升而初始化不会被提升。

12.严格模式 js的严格模式需要在脚本开头或者函数开头添加use strict

"use strict";

声明位置决定作用域。

13.赋值语句作为条件语句将返回变量的值。

==比较中数据类型是被忽略的。===作为恒等计算符需要同时计算值与类型。

switch语句会使用恒等计算符比较。

+可用于数值相加和字符串连接,可把Number类型转化为String类型

js中的所有数据都是以64位浮点型存储,因此在浮点数0.1 0.2进行+与==的运算时容易出错,可以使用乘法解决问题。

字符串分行:字符串内断行需要反斜杠 /

不用对return语句进行断行,因为js遇到不完整的语句会自动读取下一行,而return语句已经属于完整语句。

js支持对象使用名字索引,数组使用数字索引。如果对数组进行使用名字索引的操作,将导致数组被重新定义为标准对象。

对象只有被定义后才有可能为null,null用于对象,underfined用于变量、属性、方法等。因此在判断当前对象是否存在时,先使用typeof判断是否为“undefined”再判断!==null。

14.表单 optional可选 required必须

表单验证包括:通过form[][]选择表单字段的数据值是否存在 null或者"";通过id与逻辑代码限制输入值。

浏览器自动验证:required

数据验证:客户端验证 服务器端验证

约束验证:html5属性配合css选择器验证 DOM方法 

15.JSON

JSON.parse()用于将一个 JSON 字符串转换为 JavaScript 对象。
JSON.stringify()用于将 JavaScript 值转换为 JSON 字符串。

16.javascript:void(0)用于定义死链接,虽然不返回任何东西,但是括号内的表达式会执行。

17.异步AJAX 用在向服务器请求数据和setTimeOut,有JQuery要求。

18.Promise

then 块默认会向下顺序执行,return 是不能中断的,可以通过 throw 来跳转至 catch 实现中断。

当需要多次顺序执行异步操作的时候,例如,如果想通过异步方法先后检测用户名和密码,需要先异步检测用户名,然后再异步检测密码的情况下就很适合 Promise。

19.对私有变量--闭包

变量声明时如果不使用 var 关键字,那么它就是一个全局变量,即便它在函数内定义。

闭包:是保护私有变量的机制,形成一个不会销毁的栈环境,在函数执行时形成私有的作用于,保护其中的私有变量不受外界干扰。

JS面经问题题解:

六种基本数据类型:Number、String、Symbol、Boolean、Null、Undefined

Symbol:Symbol()每次都会创建出一个独一无二的值,在===严格比较下为false。

判断是否为null或者undefined的写法:

null直接使用===判断,underfined通过typeof操作符。

null是object吗?

使用typeof null查看null的类型是object,这是因为js原始版本使用32位系统时,依靠低位来存储数据类型,000表示object对象类型,而null的存储为全零,因此被判定为object类型,现在类型的判断代码修改了,但是对null的类型判定保存下来。但是实际上null表示空值,是基本数据类型的一种,不是对象。

原始类型和对象类型的区别:六种基本数据类型都是原始类型,而Object为对象类型。

类型原始类型对象类型
不可改变可以改变
属性和方法不能添加能添加
存储值地址(指针)
比较值的比较地址的比较

typeof与instanceof:

使用上分别为:

typeof 对象或者原始值的表达式

实例 instanceof 构造函数

返回结果上:

typeof返回一个字符串表示基本类型,instanceof返回一个布尔值。

检测正确性上:

typeof对于六种基本数据类型,除了null之外都可以得到正确结果,对于引用数据类型,除了function都会被识别为object。

用于检测构造函数的prototype属性是否出现在某个实例的原型链上,因此有时不能正确判断基本数据类型,但是可以判断复杂引用数据类型。

如果需要通用检测数据类型,可以采用Object.prototype.toString,调用该方法,统一返回格式“[object Xxx]”的字符串。

全局通用的数据类型判断方法:

function getType(obj){
  let type  = typeof obj;
  if (type !== "object") {    // 先进行typeof判断,如果是基础数据类型,直接返回
    return type;
  }
  // 对于typeof返回结果是object的,再进行如下的判断,正则返回结果
  return Object.prototype.toString.call(obj).replace(/^\[object (\S+)\]$/, '$1'); 
}

正则表达式:

/^\[object (\S+)\]$/

如何判断一个对象类型是数组:

根据构造函数来判断 xxx instanceof Array

根据class属性判断 Object.prototype.toString.call(obj)==='[object Array]'

直接用isArray判断

js类型转换:

六种数据类型:number string function boolean symbol object

两种不含值的数据类型:null undefined

三种对象类型:Object Array Date

 1.转为boolean:在条件判断时,除了 undefined , null , false , NaN , ''", 0 , -0 ,其他所有值都转为 true ,包括所有对象。

2.转为数字: 全局方法Number()  Number方法

3.转为字符串:全局方法String() 类方法toString() 一元运算符

对象转化为原始值的步骤:

在朝布尔值的转化中,所有的对象与函数都被转化为true,包括new Boolean(false)

所有对象都继承了两个转换方法:toString() valueOf(),有许多类定义了不同版本的toString方法。valueOf一般返回对象本身,但日期类表示的从1970年1月1日到当前日期的毫秒数。

NaN定义:表示不是一个数字

==与===在不同类型的比较

深拷贝与浅拷贝浅拷贝与深拷贝(JavaScript) - 简书 (jianshu.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值