初始JS
1. 什么是JS?
JS:javascript,简称JS,他是一门编程语言。
2. JS能做什么?
1.开发网站
2.开发app
3.小程序
4.游戏开发 小程序游戏 网页游戏
5.写后端 node.js
6.嵌入式 c
7.区块链
…
3. JS的三种写法
1)把JS写在html文件中,学习时通常就写在script标签中(内部写法)
2)把JS写在JS文件中,然后在html文件中通过script标签引入,写项目时通常会把JS写在一个单独的文件中(外部写法)
3)把JS代码写在开始标签中,当成开始标签的属性(行内写法)
//内部写法
<script>
var a = 100;
console.log(a);
</script>
//外部写法
<script src="./out.js"></script>
//行内写法
<button onclick="console.log(888)">点我</button>
4. JS的基本语法
基本语法:
1)JS时需要区分大小写的,var a = 1; var A = 2;
2) JS代码运行时会自动忽略空白符(空格 换行 tab)
3)每一条语句后分号可加可不加
4)注释,//单行注释,/多行注释/
5)标识符和关键字,var a = 100,var时关键字,a是变量名标识 6)…
//单行注释
//var时关键字,a时变量名标识符
var a = 100;
/*多行注释*/
/*每一条语句后的分号可加可不加
但是为了代码整齐好看
建议全加分号
或者全不加分号
*/
var b = 200;
var c = 300
5. JS中的变量
数据:一个软件打开后界面上有很多数据,也叫状态,这个 状态可以保存在两个地方,一个是内存,一个是硬盘。项目运行起来,只有把数据加载到内存中,才能使用数据。
变量:变量就是内存中的一个空间。
变量名:内存空间的别名,对变量名的操作就是对内存空间的操作。
变量值:存储在内存空间里的状态(数据)。
在JS中,如何定义变量:
var a = 100;//定义了一个变量,变量名是a,变量a的值是100。
变量的分类:
1)全局变量
2)局部变量
分界点是函数
只要把变量写在函数里面就是局部变量,写在函数外面就是全局变量。
//写在函数外部的变量叫局部变量
var address = "郑州";//全局变量
Address = "河南";//全局变量
//定义函数 函数必须通过function进行函数声明
//定义了一个函数f,函数名是f。
function f(){
//写在函数内部的变量叫局部变量
var m = 100;//布局变量
a = 200;//全局变量
}
if(address = "郑州"){
var k = 300;//全局变量
b = 200;//全局变量
console.log(k);
}
for(var i=0; i<3; i++){//i是全局变量
var o = 400;//o是全局变量
c = 200;//全局变量
console.log(i);
}
k = 123;
//如果没有加var,此时这个变量只能是全局变量,不管你是写在函数里边还是函数外边
全局变量和局部变量有什么特点:
1)全局变量可以在函数内部外部都能访问到;
2) 局部变量只能在函数内部访问到,在函数外部访问不到。
var a =100;//全局变量
function f1(){
console.log(a);//函数内部可以访问到全局变量
var b=200;//局部变量
console.log(b);//函数内部可以访问到它内部的变量
}
f1();//一个函数没有调用相当于这个函数没有写
console.log(b);//b is not defined,函数外部不能访问局部变量
6. JS中的数据类型
为了更加合理的使用内存空间,基本上所有的编程语言中都提出了数据类型的概念,研究针对不同的数据,分配不同的空间。
JS中的数据类型:
1)基本数据类型:
number 数字 var a=100; int a=110;
string 字符串 “” ‘’ JS中不分字符和字符串,都叫字符串;
boolean 布尔类型 true/false
undefiend 没有值
null 空值,没有值
2)引用数据类型:
object 对象
array 数组
function 函数 在JS中函数也是一种数据类型
6.1 JS中的number数据类型
1)number是一个数据类型,这个数据类型对应的值有无数个。
2)可以通过typefo查看一个变量值的数据类型。
3)最大值(Number.MAX_VALUE),最小值(Number.MIN_VALUE)。
4)在JS中number数据类型不分整数和小数,都是number。
5)number可以通过不同进制显示,2进制、8进制、10进制、16进制。
6)NaN,Not a Number,不是一个数字。
7)JS中不要对小数运算,要运算先转成整数,得到的结果往往不对。
在JS中,说到数据类型主要指变量值的数据类型。
var a = 100;
var b = 5.21;
console.log(a);
console.log(typeof a);//查询变量a的值的数据类型
console.log(typeof b);//查询变量b的值的数据类型
console.log(Number.MAX_VALUE);//MAX_VALUE 属性JavaScript 中可表示的最大的数
console.log(Number.MIN_VALUE);//MIN_VALUE 属性JavaScript 中可表示的最小的数
if(a>b){
console.log("a的值大于b的值");
}
else{
console.log("b的值大于a的值");
}
6.2 JS中的string数据类型
1)在JS中使用‘’ “”把字符串包起来,不包JS会给它当成变量
2)单引号不要嵌套单引号,双引号不要嵌套双引号。外单内双、双内单。
3)string数据类型对应的数据有无数个。
SyntaxError表示语法错误。
var address = "beijing";//string类型
console.log(address);
console.log(typeof address);//查询变量address的值数据类型
var a = "这是一个'字符串'数据类型" ;//外双内单
var b = '你好"晚安"';//外单内双
console.log(a);
console.log(b);
6.3 JS中的boolean数据类型
1)boolean数据类型对应的值就两个true和false。
2)true和True不一样的,JS是区分大小写的。
var b = true;//布尔类型
console.log(b);
console.log(typeof b);//查询变量b的值的数据类型
6.4 JS中的undefined数据类型
1)undefiend是一个数据类型,这种数据类型对应的值undefiend
2)什么时候会出现undeined?
答:一个变量没有赋值,它的值是undefiend; 这个值的类型是undefiend。
var a;//声明了一个变量a,但是并没有给a赋值。
console.log(a);//此时a的值是空值,即为undefined。
console.log(typeof a);//当a的值是空值时,a的值的数据类型undefined。
7. JS代码在执行时分两个阶段
JS代码在执行时分两个阶段:
1)预编译
2)代码执行
每一个阶段做的事情是不一样的。
定义变量和声明变量:
声明变量:var a ; 说的声明仅仅是说var a
定义变量:var a = 110; 定义 = 声明+赋值
预编译:提升
把加var的变量进行提升,变量声明会提升,变量的赋值是不会提升。
提升到了代码段最前面。
把使用function声明的函数进行提升,提升的是整个函数声明。
代码的执行:一行一行执行。
console.log(a);
//此时代码预编译时已经把变量a的声明(var a;)提升到了代码段的最面。
//则此时输出变量a的值为undefined。
var a = 100;
console.log(a);//输出变量a的值为100。
console.log(b);
var b = f();
function f(){
console.log("这是一个函数");
}
f();//调用函数。
var i = 0;
a=i++; //i=0+1=1 a=0
b=++i; //i=1+1=2 b=2
console.log(i);//2 i=2
console.log(a);//0
console.log(b);//2
var i = 0;
a=i++; //i=0+1=1 a=0
b=++i; //i=1+1=2 b=2
console.log(i);//2 i=2
console.log(i++);//2 i=2+1=3 i++=2
console.log(++i);//3 i=3+1=4 ++i=3
8. 初步了解执行上下文(Execute Context)
在JavaScript中,执行上下文(EC)是一个基本概念,在执行上下文中,包括了变量对象(VO,Variable Object),作用域链(Scope Chain)等,与闭包,函数/变量提升息息相关。EC的作用:给代码提供数据。
代码分两类:
全局代码
函数外面的代码叫全局代码
函数代码
一个函数就是一个局部代码
局执行上下文:
全局代码在执行时时,就会产生EC。 EG(G)
部执行上下文:
函数代码在执行时,就会产生EC。调用一个函数就产生一个EC100个函数,就产生100个EC。
EC栈:
栈:杯子。每产生一个EC就会放到杯子中,说白了,就是杯子中放鸡蛋。先放进去的后出来。
var n=100;//全局变量
console.log(n);
console.log(window.n);
//window是一个全局变量,只要是一个全局变量或全局函数都会挂载到window上
var a = 100;//全局变量
function f() {
console.log("f...");
}//全局函数
f();
f();
f();
9. let和const声明变量
let:
1)let声明的变量没有提升(let声明的变量也提升,仅仅是没有初始化)
2)let 配合 {} 也可以形成块级作用域
3)使用let声明的变量不会挂载到GO上
4)使用let不能重复声明
console.log(a);
let a=1;//Cannot access 'a' before initialization
if(true){
var a = 110; // 全局变量
// b只能在当前的{}中被访问到 出了块就访问不了
let b = 666; // let + {} 形成块级作用域
}
console.log(b); // b is not defined
let a = 110;
console.log(window.a); // undefined 访问一个对象上没有属性,得到的就是und
let a = 1;
let a = 2;
console.log(a); // Identifier 'a' has already been declared
const: const是声明一个常量
1)const声明的常量也没有提升
2)const配合 {} 也可以形成块级作用域
3)使用const声明的常量不会挂载到GO上
4)使用const不能重复声明
5)const在声明常量时,必须赋值
console.log(a);
const a = 1; // Cannot access 'a' before initialization
if(true){
const a = 111;
}
console.log(a); // a is not defined
if(true){
const a = 111;
}
console.log(a); // a is not defined
const a = 1;
const a = 2;
// Identifier 'a' has already been declared
console.log(a);
const a;
a = 1;
console.log(a);
//Missing initializer in const declaration常量声明中缺少初始值设定项