这是我参与「第四届青训营 」笔记创作活动的第6天
变量
声明一个变量时,关键字var其实不是必须的,但最好再每次声明新变量时都加上
js不是强类型语言
null表示变量没有值
unidefined表示变量已被声明但未被赋值
变量作用域 本地变量和全局变量 应该尽量避免使用全局变量
真值、假值
undefined、null、+0、-0、NaN、‘’(长度为0的空字符串)都是false
其余均为true,尤其对象始终为true
相等操作符(==和==)
== 不同类型的值也会看做相等:
-
null == unidefined // true
-
数字 == 字符串 // 数字 == toNumber(字符串)
-
布尔值 == 任何类型 // toNumber(布尔值)==任何类型
-
字符串或数字 == 对象 // 字符串或数字 == toPrimitive(对象)
-
如果x和y是相同类型,js会比较它们的值或对象的值,其他没有列入这个表的情况都返回false
toNumber()和toPrimitive()方法是js内部的,外部不可以直接调用
toNumber返回结果
undefined //NaN
null //+0
布尔值(true 1 false +0)
数字 //数字对应的值
字符串 //将字符串解析成数字,如果字符串中包含字母,返回NaN;如果由数字字符组成,转换成数字
对象 //Number(toPrimitive(value))
toPrimitive()的返回结果
对象 //如果对象的valueOf方法的结果是原始值,就返回原始值,如果对象的toString()方法返回的是原始值,就返回这个值,其他情况都返回一个错误
===操作符
-
如果两个值的类型不同,比较的结果就是false,
-
若类型相同,
数字 x,y数值相同且不是NaN //true
字符串 x,y是相同的字符 //true
布尔值 同为true或false //true
x,y引用同一个对象 //true
js中的对象就是普通键值对的集合
es6
-
let 使得js中的变量作用域 ,变的和java、c的一样了
-
const 定义的只读变量不可以被重新赋值
-
模板字面量
变量a的值为:${变量a},也可以用于多行字符串不需要/n,只需要按enter即可 -
箭头函数
let getSum = (a,b) => {
return a+b}
或只有一条语句的函数可以更简单 let getSum = (a,b) => a+b
函数的参数可以有默认值eg:
function sum(x = 1,y = 2,z = 3){
return x+y+z
}
- 声明展开和剩余参数
代替es5中的apply()把数组转化为参数,es6有了展开操作符(...)eg:
a = [1,2,3]
sum(...A)
也可以当作剩余参数
function sum(1,2,...a){}
- 增强的对象属性
数组解构 赋值,变量互换
对象结构 属性简写 obj = {x,y}
方法属性 对象声明看起来像属性的函数{print(){}}
js面向对象编程和java等的类似之处