- {}=={}; 结果为false。
undefined == null; //true
undefined === null; //false
+0 === -0 //true
Object.is(+0,-0) //false
NaN === NaN //false
Object.is(NaN,NaN) //true
- NaN == NaN; 结果为false
- JavaScript执行上下文:可以看做是代码的执行环境,他决定这代码的作用域。分为三种:全局环境、函数环境、Eavl环境。
- 被Boolean()转换为false的有:""、0、NaN、null、undefined
- switch(num)中的num和case处的数值的匹配必须是全等的
let num = 2;
swithc(num){
case 1:
//TODO
case 2:
//TODO
}
简单类型(值类型/基本数据类型):存储时变量存储的是值本身
- string,number,Boolean,undefined,null(这个typeof(null)为object)
复杂数据类型(引用类型):在存储时变量存储的仅仅是地址引用
- 通过new关键字创建的对象(系统对象,自定义对象),如Object,Array,Date
- 可以用 + 来巧妙地将字符串转化为数字
-
保持2位数,不需要手动判断再补0,比如时分秒的情况。
00${hours}.slice(-2)
先补上,在从后面截取两位 -
parsInt针对的是字符串值,传递非字符串参数首先会被强制类型转换为字符串
-
事件 阻止默认事件:
e.preventDefault()
e.returnValue = false (IE)
阻止冒泡:
e.stopProagation()
e.cancelBubble() (IE)
onBlur:当失去输入焦点后产生该事件
onFocus:当输入获得焦点后,产生该文件
onchange:当文字值改变时,产生该事件
onselect:当文字加亮后,产生该事件
onClick:当组件被点击时产生的事件
- 可选链(?.):防止值为undefined和null时报错
let arr = res && res.data && res.data.list
可选链的写法:
let arr = res?.data?.list
- 空值运算符(??=).当??=左边的值为空的时候,就会将右边的值赋给它
let name = '狗蛋';
let newName = '张三'
let num = null;
let newNum = '123'
name ??= newName; // b ='狗蛋'
num ??= newNum // c = '123'
- JavaScript全局属性
6(编码相关)+ 2(数据处理)+ 4(数字相关)+ 2(其他)
编码相关:
escape()、unescape()、encodeURI()、decodeURI()、
encodeURIComponent()、decodeURIComponent()
数据处理:
Number()、String()
数字相关:
isFinite()、isNaN()、parseFloat()、parseInt()
特殊:
eval()
- 一些内部对象
Navagator:提供有关浏览器的信息
Window:Window对象处于对象层次的最顶层,它提供了处理Navagator窗口的方法和属性
Location:提供了与当前打开的URL一起工作的方法和属性,是一个静态的对象
History:提供了与历史清单有关的信息
Document:包含与文档元素一起工作的对象,它将这些元素封装起来供编程人员使用
- 正则一些符号:
* :出现零到多次
+: 出现一到多次
?:出现零次或者一次
. : 除了\n以外的任意字符
{n} : 出现n次
{n,} : 出现n到多次
{n,m} : 出现n到m次
- JavaScript内置的可迭代对象: 一个数据结构只要具有Symbol.iterator属性,就可以认为是“可遍历的”(iterable)
- Array
- Map
- Set
- String
- TypedArray
- 函数的 arguments 对象
- NodeList 对象
- js内置对象
| 内置对象 | |
|---|---|
| Arguments | 函数参数集合 |
| Array | 数组 |
| Boolean | 布尔对象 |
| Date | 日期对象 |
| Error | 异常对象 |
| Function | 函数构造器 |
| Math | 数学对象 |
| Number | 数值对象 |
| Object | 基础对象 |
| RegExp | 正则表达式 |
| String | 字符串对象 |
- 数组的一些API arr.filter()用于筛选出满足要求的数组元素,并返回新的数组;
arr.some()用于检测数组是否有满足条件的元素,只要存在元素满足要求,则返回true,否则返回false;
arr.every()用于检测数组的所有元素是否都满足条件,都满足条件时返回true,否则返回false;
arr.map()会对数组中每个元素进行单独判断,返回true或者false,作为新数组的元素
# ES5新增方法:forEach,filter,some,map的用法和区别
- +new Array(017),输出为:NaN 017,八进制,转为15,所以创建长度为15的数组,“+”又转为数字,结果就为NaN了
- 循环方法的遍历时的比较(待测试)
let array = [,1,,2,,3];array = array.map((i) => ++i)
ES5:
-
orEach(), filter(), reduce(), every() 和some()都会跳过空位。
-
map()会跳过空位,但会保留这个值
-
join()和toString()会将空位视为undefined,而undefined和null会被处理成空字符串。
-
ES6 中都会将空位当做undefined
function fn(){
console.log(1);
}
console.log(typeof []);//object
console.log(typeof '[]');//string
console.log(typeof 1);//number
console.log(typeof true);//boolean
console.log(typeof null);//object
console.log(typeof undefined);//undefined
console.log(typeof {id:2});//object
console.log(typeof fn);//function
- string 和 String 字符串有length,是装箱有关,最后还是基本类型
let str = String('xxx')
str instanceof String //false
let str1 = new String("sdf")
str1 instanceof String //true
typeof str1 //'object'
-
正则 \d 匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w 匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。
\W 匹配非字母、数字、下划线。等价于 '[^A-Za-z0-9_]'。 -
this指向
- 函数调用时,指向window,严格模式下指向undefined
- 以方法调用时,指向调用该方法的对象
- 使用new创建一个对象时,指向该对象
- call,apply ,bind可以改变this指向 区别,传参不同
- 不支持冒泡的事件
①focus
②blur
③mouseenter
④mouseleave
⑤load
⑥unload
⑦resize
- 对数值使用方法
2.toString()将会优先将小数点解析为数字小数点
以下写法可以规避这种情况
(2).toString()
2 .toString()
2..toString()
- 关于delete: 一、delete是干什么的:
- delete 操作符用于删除对象的某个属性;如果没有指向这个属性的引用,那它最终会被释放。
二、delete使用要注意什么:
-
如果你试图删除的属性不存在,那么delete将不会起任何作用,但仍会返回true
-
如果对象的原型链上有一个与待删除属性同名的属性,那么删除属性之后,对象会使用原型链上的那个属性(也就是说,delete操作只会在自身的属性上起作用)
-
任何使用 var 声明的属性不能从全局作用域或函数的作用域中删除。在eval()函数中可以被删除。
- 这样的话,delete操作不能删除任何在全局作用域中的函数(无论这个函数是来自于函数声明或函数表达式)
- 除了在全局作用域中的函数不能被删除,在对象(object)中的函数是能够用delete操作删除的。
-
不可设置的(Non-configurable)属性不能被移除。这意味着像Math, Array, Object内置对象的属性以及使用Object.defineProperty()方法设置为不可设置的属性不能被删除
-
未使用var申明的全局变量可以被删除
引自:MDN developer.mozilla.org/zh-CN/docs/…
摘自牛客
- 在ECMAScript6 中,Promise的状态
- 1.一个promise可能有三种状态:等待(pending)、已完成(fulfilled又称resolved)、已拒绝(rejected)
- 2.一个promise的状态只可能从“等待”转到“完成”态或者“拒绝”态,不能逆向转换,同时“完成”态和“拒绝”态不能相互转换
- 3.promise必须实现then方法(可以说,then就是promise的核心),而且then必须返回一个promise,同一个promise的then可以调用多次,并且回调的执行顺序跟它们被定义时的顺序一致
- 4.then方法接受两个参数,第一个参数是成功时的回调,在promise由“等待”态转换到“完成”态时调用,另一个是失败时的回调,在promise由“等待”态转换到“拒绝”态时调用。同时,then可以接受另一个promise传入,也接受一个“类then”的对象或方法,即thenable对象。 来自牛客题
-
arguments是函数(除了箭头函数外)的内置对象,它是一个伪数组;用于获取函数的全部参数
-
JavaScript中0/0的结果是NAN
-
严格模式
- this指向undefined
- 变量必须先声明再复制,且不允许删除变量或(对象)函数
- 函数不许重名参数
- 立即执行函数的this指向取决于上下环境
- 构造函数的this指向实例对象