JS的运行环境
- 浏览器
- node.js
表达式&语句
![](https://img.haomeiwen.com/i4679793/bd92c757e123da3b.png)
在图中5 % 3中的%是<strong>取模运算符</strong>,图中5除以3得出的结果是余2
![](https://img.haomeiwen.com/i4679793/293e30a7b4215d9f.png)
1 + 1是表达式,表达式是有值得,1+1的值是2.把2的值赋值给a,就是赋值语句.
赋值语句(var a = 1 + 1)它的<strong>本身是没值的</strong>,所以返回了undefined
![](https://img.haomeiwen.com/i4679793/77da40cbe86204f6.png)
前面不用<b>var</b>声明,它就有值. 1 + 1的值就是a
![](https://img.haomeiwen.com/i4679793/1519edeaadc0b20f.png)
看看console.log(1)返回的是什么,1是console.log(1)的,<strong>而console.log(1)本身是没有值得,所以返回undefined.</strong>
变量
var a /*用var 就是声明变量,此时a就是一个变量*/
a = 1
a = 'stringaaa' //它的值可以是1,可以是stringaaa,总之可以随便改.既然它的值可以变,所以他就是变量
除了var以外还有什么可以声明?
- let //不可重复声明,
- const //不可重复声明,<b>在声明的时候必须要赋值,这个值不能修改</b>
直接声明变量(全局变量)
a = 1 /*如果你在(非函数内)顶级的作用域,不用var直接声明a,他就是一个 全局变量.
首先a会去找有没有声明过a,没有声明过就变成global.a */
<b>如果你声明一个最外层的变量,那么这个变量默认就是global.变量</b>
变量提升<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
由于JS代码是一行一行的执行
var a
console.log (a)
a = 1 //此处的var a 会跑到console.log(a)的前面.
function a(){
a = 1
//当前作用域的var提升到函数a()里面的顶层,注意!是里面!
//若var脱离了function,则销毁var a
var a
}
<b>只要是声明,就会被提前 !变量提升只对var声明的变量有用!</b>
浏览器分两次解释代码,第一次先读这段代码有多少变量,在执行.
常量
x = 2 //可以
1 = 3 //不行
<b>所以常量就是赋值不能变的量
用const可以声明常量
</b>
if...else
var n = 1
if (n === 1) {
console.log('1111')
}else if (n === 2) {
console.log('2222')
}else {
console.log('3333')
}
n等于1的时候console.log('1111')
n等于2的时候console.log('2222')
n等于其他值的时候console.log('3333')
switch
var b = 4
switch (b) {
case 1:
console.log('1111') //b等于1时,console.log('1111')
break;
case 2:
console.log('2222') //b等于2时,console.log('2222')
break;
default:
console.log('No') //b不满足以上条件时 console.log('No')
}
break表示一个case的结束
<b>break必须以分号;结尾</b>
三元运算符 ?:
console.log(b===1 ? 1 + 1 : 2 + 3)
这是相当于简化版if , b的值是1 , 就会输出2 , 不是则5
while循环语句
var a = 1
while (a < 11) {
console.log(a)
a = a + 1
}
console.log('完')
![](https://img.haomeiwen.com/i4679793/ad437983c5090f2d.png)
当a小于11时 , console.log(a) , 然后a 赋值变成 a + 1 , 直到a不小于11 , console.log('完')
var a = 1
var b
while ((b = a) < 11) {
console.log(b)
a += 1
}
把a的值赋值给b , 执行循环
for循环
for (var a = 1;a < 11;a++) {
console.log(a)
}
在上面的for循环中var a = 1只执行一次,如果while这么写, 那它每次都会执行var a = 1
do...while
var a = 1
do{
console.log(a)
a += 1
}while (a < 11)
console.log('结束')
它和while的区别就是 , 先做事(先循环一次) , 再判断
continue和break
![](https://img.haomeiwen.com/i4679793/366e79c829e7cb12.png)
![](https://img.haomeiwen.com/i4679793/c1a1530c129383b4.png)
continue的意思就是, 马上跳出进入下次循环
break就是立即跳出循环
JavaScript属于结构化编程
1.代码是一行一行的执行
2.有if...else
3.有循环
满足以上三个条件就属于结构化编程
数据类型&typeof操作符
typeof用来检测变量的数据类型
<b> number
boolean
null
undefined
string
symbol()</b> /**symbol()是ES6引入的新的字符类型. 以它为值,这个值和谁都不相等,symbol()就是产生一个独一无二的值. **/
以上 的数据类型属于基础类型, 没有「引用」的概念 . 还有一种复杂类型就是Object
Q20170325140706.png
JS 只能表示两个字节的Unicode
网友评论