变量声明且赋值
console.log(typeof+'123')number
let i=1
++在前则先自加 再使用
console.log(++i + 2)// 4
console.log(i++ + 2)//3
自增常用来技术,用来计算多少次
let i=1
console.log(i++ + ++i + i)
i=1 i=2 ++i=3 i=3
1+3+3=7
- 比较运算符
问题:三种等号之间的区别
= 是赋值号 左边必须是一个容器 赋值时左边无效
== 左右两边是否相等
=== 左右 两边是否类型和值相等
console.log(3>5) //false
console.log(5 == 5) //==只要值一样就成立,和数据类型无关
开发时经常使用 相等的时候使用 === 值和数据类型都一样
不相等 !== 左右两边是否不全等
字符串可以比较 比较的时字符串的ASCII码
NAN不等于任何值,包括它本身
小数的比较有精度 问题,最好不要相比较
不同类型之间的比较会发生隐式转换
变比较运算符返回的结果时true和false
入门容易 理解难 精通更难
- 逻辑运算符
逻辑与 一假全假 逻辑或 一真全真 逻辑非 取反
&& 左边是false就短路 逻辑与
|| 右边是true就短路 逻辑或
逻辑运算符的短路 只要出现结果可以确定的情况就不在计算下去
数字0是假的,其余的都是真的
字符串 空为假 其余 都是真的
console.log(undefined && 20) //undefined
正常执行的话是以后面为准
逻辑或相反
一个变量有定义没有给值,默认是undefined
两个未知的数相加结果是NAN
逻辑或短路
三元运算符
条件?满足条件执行的代码:不满足条件执行的代码
函数
函数有返回值,用关键字return
return 后面不接数据或者函数内不屑return ,函数的返回值是undefined
return能理解结束当前函数,所以return后面的数据不要换行写
函数的作用域
/ 一代程序代码中所用到的此名称并不总是有效和可用的,而限定这个名字的可用性代码范围就是 这个名字的作用域, // 作用域的使用提高了程序逻辑的局部性, // 增强了程序的可靠性,减少了名字的冲突
全局作用域
全局有效 在任何区域豆可以访问和修改
局部作用域
作用域函数内的代码环境,就是局部作用这,因为跟函数有关,所以也称是函数作用域
局部变量智能在当前函数内部访问和修改
块级作用域
有{}包括,if语句和for语句里面的{}等
只能在快作用访问,不能跨快访问,也不能跨函数访问
变量有一个注意点就是
如果函数内部或者块级作用域内部,变量没有声明,直接赋值的话,是全局变量
if(true){ num=10 } console.log(num)
if(true){ let num=10 } console.log(num)
形参是局部变量 function f(x,y) { document.write(x+y) } f(1,2) console.log(x)
变量访问原则
只要是代码就至少有一个作用域
写在函数内部的局部作用域
如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定那些数据能被内部函数访问,就称作作用域链
function f1() { let num=123 function f2() { let num=0 console.log(num) } f2() } let num=456 f1()