语法
- "==" 会先看是否要转化类型再比较是否相等
"===" 必须是类型和数值都相等,但是只要有一个是NaN,结论就是false - for in 会遍历的是下标,for of 会遍历的是元素
for (let c in ['a','b','c','d']) { console.log(c); } //输出0, 1, 2, 3 for (let c 0f ['a','b','c','d']) { console.log(c); } //输出0, 1, 2, 3
-
if条件会进行boolean转换,比如空字符串、null、undefined、0、NaN都会被转换成false
//这个弹窗是会弹出来的!因为任何不是空字符串的,都会被认成是true; if("0"){ alert("hello"); }
-
比较|| 和?? (||会筛选出第一个不是假值的,但是0,false,""都算假的)??会筛选出第一个不是undefined或null的。如果没有明确添加括号,不能将其与
||
或&& 一起使用。 -
//只有??才能真正的筛选出null 和 undefined //??的优先级很低,所以应该记得加括号 let height = null; let width = null; let area = (height ?? 100) * (width ?? 50); //如果不加括号,这里相当于 //let area = height ?? (100 * width) ?? 50); //null被转化为0,最后的结果会为0 alert(area);
函数
- 函数内部如有同名变量,会遮盖函数外部的变量
- 函数内部修改的是变量值的副本,所以在外部看不到更改
- 函数里可以设定默认的参数,设定的方式是等号,以下为函数声明:
function print(from, text = 'no given text'){ ... } //当然此处text还可以是更复杂的函数表达式 function print(from, text = anotherFunction()){ ... }
然后当调用函数的时候,如果没有传入text,那就会调用anotherFunction(),计算出text的数值
- 函数表达式:函数声明是全局可见的,但是函数表达式只有当执行到了这个位置时才可见。
- 同时,函数声明会受到代码块的限制。在代码块之外不能执行(undefined)。
- 要解决这个问题,可以在 if ( )之外定义变量,在if内部用函数表达式定义函数。
-
//函数声明 function print(){ .... } //函数表达式 let print = function(){ .... }
数据类型
js中有8种数据类型,7种原始类型和一种引用类型。
Number
包括整型和浮点型,同时包含一些特殊值,比如-Infinity、Infinity、NaN(粘性,对NaN的任一步操作都会返回NaN)
BigInt
js的数据范围无法超过2**53 - 1;所以引入了BigInt
// 尾部的 "n" 表示这是一个 BigInt 类型
const bigInt = 1234567890123456789012345678901234567890n;
String
- 创建string,可以有单引号、双引号、反引号
let a = "hello world"; let b = 'hello world'; let c = `hello world ${表达式或者变量}`;
- 计算某个string的ASCII
s.charCodeAt(0); //如果不传参数就默认输出[0]位置的ASCII Code s.codePointAt(0); //返回UTF-16的code,但是可以处理由于复杂字符而产生的代理对(一对2个字节组成的char)
- 获取某个位置的字符串
s[5] s.charAt(5) //这两种方法的区别是,如果这个位置不存在: //[]方法会返回undefined //charAt( )方法会返回空字符串
- 字符串分割
let s = "hello there" s.split(); //不写参数的话会把hello there作为一个大元素放进array里 s.split(""); //会把每一个字符当成元素放进array里,中间间隔""也会放进去 s.split(" "); //会把单词放进array里,但是中间多个空格连在一起的时候会放进去""
- 字符
"null"值
"undefined"型
Symbol
Object
- JS的对象是键值对的集合
- 创建对象
let Alice = new Object(); let Bob = {};
- 删除对象属性
delete alice["age"]; delete alice.age;
数组
函数
- 在array前插入元素 --- unshift( )
//array首部插入值
//unshift同时传入多个参数的话,会按照传参数的顺序直接插入
//所以这和一个参数一个参数传的不一样!
let arr = [4, 5, 6];
arr.unshift(1, 2, 3);
//[1,2,3,4,5,6]
- 结合两个数组array.concat( );
const array1 = ['a', 'b', 'c']; const array2 = array1.concat(3, [5,7],[[100]] ); //输出是Array ["a", "b", "c", 3, 5, 7, Array [100]] //[5, 7]是array,所以是元素进入了array //对于nested array, [[100]]就不会解开