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定义:表示不是一个数字
==与===在不同类型的比较