目录
和CSS一样,JS代码也可以通过行内式、内嵌式、外部式的方式嵌入到HTML代码中~
直接嵌入到html元素内部:
<input type="button" value="这是一个按钮" onclick="alert('hello world')">
这种写法不常用~
写到script标签中:
- <script>
- alert('hello world')
- script>
把JS代码写到单独的.js文件中:
- <script src="test.js">
- script>
★ 这种写法本质上就是把对应文件中的js代码拷贝到script标签中,这样做可以提取出多个文件中公共的一些代码,达到代码复用的效果,因此也是实际开发中最常用的写法~
单行注释://
多行注释:/* */
注意:多行注释不能嵌套,否则代码会报错。
使用prompt关键字:
prompt("这是一个输入框")
弹出一个对话框:
alert("hello js")
这种弹框的方式很影响用户的体验,所以在实际开发中很少用到~
在控制台打印一个日志(一般是给程序员看的):
console.log("hello JavaScript");
需要在开发者工具中的控制台查看打印结果:
★ console是JS中的一个“对象”,. 表示取对象中的某个属性或方法,console.log就表示:使用console对象的log方法~
关键字:var、let
- <script>
- var name = "曹植";
- let age = 20;
- script>
注意:
(1) var、let并非是变量的类型,只是用来声明name和age是一个变量;
(2) 变量的类型并没有显示写出来,具体的类型根据=后面的值来区分的;
(3) var写法是老式写法,坑比较多,而let是新式写法,比较推荐使用~
在JS中,变量的类型可以在运行过程中发生改变:
- <script>
- let a = 10;
- //typeof用来查看变量的类型
- console.log(typeof(a));
- a = "hello";
- console.log(typeof(a));
- script>
可以看到,a的类型从number变为了string类型~
在JS中,不区分整数和浮点数,统一使用number类型来表示:
-
- console.log(1/2);
-
2.1.1几个特殊的数字值:
(1) Infinity:无穷大,大于任何数字,表示数字已经超过了JS能表示的范围;
(2) -Infinity:负无穷大小于任何数字,表示数字已经超过了JS能表示的范围;
- <script>
- //使用一个正小数除0得到无穷大
- console.log(1.5/0);
- //使用一个负小数除0得到负无穷大
- console.log(-1.5/0);
- script>
注意:负无穷大和无穷小不是一回事,无穷小指无限趋近于0~
(3) NaN:Not a number,表示当前的结果不是一个合法的数字。
- <script>
- console.log("hello" - 1);
- script>
2.2.1基本规则
JS中,字符串既可以使用单引号,也可以使用双引号引起来:
- <script>
- let a = 'hello';
- let b = "world";
- script>
★ 如果要表示的字符串中含有单引号,就可以使用双引号引起来;
★ 如果要表示的字符串中含有双引号,就可以使用单引号引起来;
★ 否则需要使用转义字符:
2.2.2求字符串长度
使用string的length属性即可:
- <script>
- let a = 'zhangsan';
- let b = "张三";
- console.log(a.length);
- console.log(b.length);
- script>
2.2.3字符串拼接
和Java一样,直接使用 + 来拼接,会生成一个新的字符串:
- <script>
- let a = 10;
-
- console.log("a = " + a);
- script>
在JS中,布尔类型也只有两个值:true和false,并且0表示false,非0表示true。
但是布尔类型在参与运算时,会进行隐式类型转换,true转为1,false转为0进行运算:
- <script>
- let a = true;
- console.log(a+1);
- script>
弱类型语言:像JS这种,数据类型区分度低,界限模糊,比较支持隐式类型转换的语言;
强类型语言:像Java这种,数据类型区分度高,界限明确,不太支持隐式类型转换的语言。
注意:动态类型、静态类型和强类型、弱类型,是两组不同的概念。
★ undefined未定义数据类型中只有一个值:undefined。
如果一个变量没有被初始化,结果就是undefined。
undefined和字符串相加,会进行字符串拼接;和数字相加,结果为NaN:
- <script>
- //未初始化的变量a
- let a;
- console.log(a);
- //undefined和字符串相加
- console.log(hello+" "+a);
- //undefined和数字相加
- console.log(a + 10);
- script>
null空值类型也只有一个值:null,表示当前变量是一个“空值”。
- <script>
- let a = null;
- console.log(a);
- //null和字符串相加
- console.log(a+"hello");
- //null和数字相加
- console.log(a+10);
- script>
注意:undefined表示当前的变量未定义,null表示当前变量的值为空。
JS中的运算符和Java中的用法基本相同,其中有几个不同的点:
==和===都是用来比较相等的,但是==会进行隐式类型转换,而===不会:
- <script>
- let a = "10";//string类型
- let b = 10;//number类型
- console.log(a==b);
- console.log(a===b);
- script>
注意:不能直接使用==进行浮点数的比较,I EEE754标准表示浮点数不一定精确,比较的结果可能会和预期结果不同。
!= 和 !==比较规则同理~
在JS中,逻辑与&&和逻辑或||运算符返回的结果不是true或者false,而是表达式1或表达式2。
- <script>
- let a = 10;
- let b = a || 0;
- console.log(b);
- script>
★ 上述代码中,如果a的值为真,就会把a的值赋给b,否则就把0的值赋给b。
★ 而&&则相反:如果a的值为假,就会把a的值赋给b,否则就把0的值赋给b:
- <script>
- let a = 10;
- let b = a && 0;//表达式左边真,右边假
- console.log("b = " + b);
- let c = false && a;//表达式左边假,右边真
- console.log("c = " + c);
- let d = true && a;//表达式两边都为真
- console.log("d = " + d);
- script>
JS中的条件语句和循环语句的用法与Java的基本一样,这里就不赘述了~
JS中的数组功能很多,过于灵活,和Java的数组有很大的区别~
5.1.1使用new关键字创建
- <script>
- let arr = new Array();
- script>
5.1.2使用 [ ] 创建
- <script>
- let arr = [1,2,3,4,true,"hello",undefined];
- script>
注意:JS中,同一个数组里的元素可以是不同类型(因为JS是动态类型的语言)。
★ 使用下标的方式访问数组元素,数组下标从0开始:
- <script>
- let arr = ["刘备","关羽","张飞"];
-
- //访问数组0下标元素
- console.log(arr[0]);
-
- //直接输入数组名,会访问整个数组
- console.log(arr);
- script>
★ 如果要访问的下标超出数组范围,则结果为undefined:
- <script>
- let arr = ["刘备","关羽","张飞"];
-
- console.log(arr[-1]);
- console.log(arr[10]);
- script>
5.3.1通过修改数组长度新增
JS中的数组长度可以随时变化的,增加数组长度,就会在数组末尾新增元素,新增元素的默认值为undefined:
- <script>
- let arr = ["刘备","关羽","张飞"];
-
- arr.length = 10;
- console.log(arr);
-
- script>
5.3.2通过下标新增
如果下标超出数组范围,会在指定位置插入元素,并把中间的元素设为默认值undefined:
- <script>
- let arr = ["刘备","关羽","张飞"];
-
- arr[100] = "赵云";
- console.log(arr[100]);
- console.log(arr[50]);
- console.log(arr);
- script>
★ JS中的数组也可以“当做Map来存放键值对”:
- <script>
- let arr = ["刘备","关羽","张飞"];
-
- arr[-1] = "赵云";
- arr["hello"] = "world";
- arr[undefined] = 999;
-
- console.log(arr);
- script>
★ 通过代码运行结果可以发现,数组长度并没有发生变化,实际上这些键值对更像是数组这个对象中的一个自定义属性,既可以通过[ ] 访问,也可以通过 . 访问:
- <script>
- let arr = ["刘备","关羽","张飞"];
-
- arr[-1] = "赵云";
- arr["hello"] = "world";
- arr[undefined] = 999;
-
- console.log(arr.hello);
-
- script>
★ 虽然JS支持这种操作,但我们一般不这样使用,JS里有专门的map类型来表示键值对~
5.3.3使用push方法进行追加元素
- <script>
- let arr = [];
- for (let i = 0; i < 10; i++) {
- arr.push(i);
- }
- console.log(arr);
- script>
5.4.1使用pop方法删除
- <script>
- let arr = [1,2,3,4,5];
- //pop方法会返回当前删除的元素
- //删除5
- let ret = arr.pop();
- console.log(ret);
- //删除4
- ret = arr.pop();
- console.log(ret);
- //数组此时还剩3个元素
- console.log(arr);
- script>
5.4.2使用splice方法
splice既可以进行插入,也可以进行删除,还可以进行替换操作:
★ 插入
- <script>
- let arr = [1,2,3,4,5,6,7];
- //往2下标插入一个"hello"
- arr.splice(2,0,"hello");
- console.log(arr);
- script>
splice方法有三个参数:
①第一个参数表示要替换的下标位置;
②第二个参数表示要替换的数组长度,参数是0表示不对原数组内容调整,只是新增元素;
③第三个参数表示要替换到指定位置的新元素。
★ 替换
- <script>
- let arr = [1,2,3,4,5,6,7];
- //把3下标元素替换成"hello"
- arr.splice(3,1,"hello");
- console.log(arr);
- script>
★ 删除
- <script>
- let arr = [1,2,3,4,5,6,7];
- //删除3下标往后的3个元素
- arr.splice(3,3);
- console.log(arr);
- script>
如果不传第三个参数的话,就可以起到删除元素的效果~
语法格式:
//定义函数//声明函数//创建函数
function 函数名(形参列表) {
函数体;
return 返回值;
}
- <script>
- //定义函数
- function add(x,y){
- return x+y;
- }
- //调用函数
- //可以传各种类型的参数
- let sum = add(10,true);
- console.log(sum);
- script>
★ 由于JS是动态类型的语言,所以函数不需要写返回值,传入的参数也可以是任意类型。
注意:形参和实参的个数可以不匹配,但实际写代码的时候尽量保持匹配。
(1) 如果实参个数比形参个数多,则多出来的实参不参与函数运算;
- <script>
- function add(x,y,z){
- return x+y+z;
- }
- let sum = add(10,20,30,40,50);
- console.log(sum);
- script>
(2) 如果形参个数比实参个数多,则多出来的形参的值为undefined。
- <script>
- function add(x,y,z){
- return x+y+z;
- }
- let sum = add(10,20);
- console.log(sum);
- script>
number类型和undefined类型相加,结果为NaN~
函数表达式是另一种定义函数的方式:把函数赋值给一个变量
- <script>
- //用一个变量来接收函数
- let add = function(){
- let sum = 0;
- //arguments这个数组包含了调用add函数时传入的所有实参的值
- for (let i = 0; i < arguments.length; i++) {
- sum += arguments[i];
- }
- return sum;
- }
- console.log(add(10,20,30,40));
- console.log(add("hello",undefined));
- script>
★ arguments是JS中的一个内置数组变量,包含了调用函数时传入的所有实参的值~
★ 在JS中,函数是一等公民:可以用变量保存,也可以作为其他函数的参数或返回值。
★ 在JS中,如果访问一个变量,首先会在当前代码块中查找,如果当前代码块中没找到,就会继续在上级代码块中查找,一直查找到全局的作用域(