一.JS输入输出语句
方法 | 说明 |
---|---|
alter(msg) | 浏览器弹出警示框 |
console(msg) | 浏览器控制台打印输出消息 |
prompt(info) | 浏览器弹出输入框,用户可以输入,取得的值是字符型 |
二. JS中的变量
1.变量可以理解为是存放数据的盒子,通过变量名获取数据,修改数据。本质就是程序在内存中申请的一块用来存放数据的空间。
2. 变量的使用:var 变量名 = 值
3. 更新变量:一个变量被重复赋值之后,会覆盖之前的值,以最后一次赋值为准。
三. 数据类型
1.简单数据类型
简单数据类型 | 说明 |
---|---|
Number | 数字型,包含整型和浮点型 |
Boolean | 布尔值类型,true/false |
String | 字符串类型,都带引号 |
Undefined | 声明了变量但是没有给值 |
Null | 声明了变量为空值 |
2.isNaN()
来判断非数字,如果不是数字就返回true,否则返回false
3.字符串转义字符
转义符 | 说明 |
---|---|
\n | 换行符 |
\ | 斜杠 |
’ | 单引号 |
“” | 双引号 |
\t | tab缩进 |
\b | 空格 |
4.检测获取字符串的长度:length()
5.字符串的拼接:str1 + srt2 +…,只要有字符串类型,拼接后的结果都是字符串型,即数值相加,字符相连
6.获取数据类型:typeof 变量名
7.数据类型转换
1)转换为字符串
方式 | 说明 | 使用 |
---|---|---|
toString() | 转成字符串 | 变量.toString() |
String() | 转成字符串 | String(变量) |
加号拼接字符串 | 和字符串拼接结果都是字符串 | \ |
2)转换成数值型
方式 | 说明 |
---|---|
parseInt(string) 函数 | 将string类型转换成整数型 |
parseFloat(string)函数 | 将string类型转换成浮点数型 |
Number()强制转换函数 | 将string转换为数值型 |
js隐式转换(- * /) | 利用算数运算隐式转换为数值型 |
3)转换成布尔型:Boolean()
四. 运算符
1.全等和相等的区别:全等是值和数据类型都一样,相等只需要值相等。
2.运算符优先级
优先级 | 运算符 | 顺序 |
---|---|---|
1 | 小括号 | () |
2 | 一元运算符 | ++ – ! |
3 | 算术运算符 | 先*/%后± |
4 | 关系运算符 | > >= < <= |
5 | 相等运算符 | !== === == |
6逻辑运算符 | 先&& 后 ll | |
7 | 赋值运算符 | = |
8 | 逗号运算符 | , |
五.预解析(很重要)
1.原理:JS代码是由浏览器中的JS解释器来执行的,JS解释器在运行JS代码时分为两步:预解析和代码执行。
1)预解析:JS引擎会把JS里面所有的var和function提升到当前作用域的最前面
2)代码执行:按照代码书写的顺序从上往下执行
2.预解析分为变量预解析(变量提升)和函数预解析(函数提升)
1)变量提升就是把所有的变量声明提升到当前的作用域的最前面,但是不提升赋值操作。
//输出的值是undefined
console.log(num);
var num=10;
//上面的两行代码相当于是下面的执行顺序,所以控制台输出的是undefined
var num;
console.log(num);
num=10;
2)函数提升:把所有的函数声明提升到当前作用域的最前面,但是不调用函数
//按照这样子写会报错
fun();
var fun=function(){
console.log("Hello World!");
}//这是一个函数表达式,进行调用必须写在函数表达式的下面
//上面的代码进行解析后的执行顺序相当于是下面的,没有对fun()进行声明当然会报错
var fun;
fun();
fun=function(){
console.log("Hello World!");
}
//还有另外一种情况:可以正常输出'Hello World!'
fun();
function fun(){
console.log("Hello World!");
}
//这是因为进行了函数解析后的执行顺序相当于是下面的,所以可以正常输出
function fun(){
console.log("Hello World!");
}
fun();
案例1:结果是多少?
var num = 10;
fun();
function fun() {
console.log(num);
var num = 20;
}
进行预解析之后的代码执行顺序是下面的,得到的结果显然是undefined
var num;//全局提取
function fun() {
var num;//局部提取
console.log(num); //undefined
num = 20;
}
num = 10;
fun();
案例2:
f1();
console.log(c);
console.log(b);
console.log(a);
function f1() {
var a = b = c = 9;
console.log(c);
console.log(b);
console.log(a);
}
//相当于:
function f1() {
var a;
a = 9;
b = 9;
c = 9;
//这里的意思是var a=9;b=9;c=9;注意是分号
//直接赋值而没有声明,当作全局变量来看
console.log(c);//9
console.log(b);//9
console.log(a);//9
}
f1();
console.log(c);//9 全局变量
console.log(b);//9 全局变量
console.log(a);//a is not defined 报错 局部变量