JavaScript学习笔记
前言
学习视频: 【狂神说Java】JavaScript最新教程通俗易懂
感谢狂神!!!
此笔记用于记录本人在学习中还有不懂以及值得注意的地方。以方便日后的工作与学习。
笔记中有些个人理解后整理的笔记,可能有所偏差,也恳请读者帮忙指出,谢谢。
部分内容不完整,请读者结合视频观看效果更佳。
注意
此笔记并非完整笔记
需要完整笔记的同学可以移步到【狂神说Java】JavaScript学习笔记
再次感谢狂神!!!
跟对人,做对事。——狂神说
快速入门
==console==
console.log()相当于Java中的System.out.println();
==number==
NaN //not a number
Infinity // 表示无限大
==比较运算符==
== 等于(类型不一样,值一样,也会判断为true)
=== 绝对等于(类型一样,值一样,结果为true)
这是一个JS的缺陷,坚持不要使用 == 比较 须知:
- NaN === NaN,这个与所有的数值都不相等,包括自己
- 只能通过isNaN(NaN)来判断这个数是否是NaN
浮点数问题
尽量避免使用浮点数进行运算,存在精度问题!
Math.abs(1/3-(1-2/3))<0.00000001
Math.abs求绝对值
==null 和 undefined==
- null 空
- undefined 未定义
==数组==
Java的数组必须是相同类型的对象~,JS中不需要这样
//保证代码的可读性,尽量使用[]
var arr = [1,2,3,4,5,'hello',null,true];
//第二种定义方法
new Array(1,2,3,4,5,'hello');
取数字下标:如果越界了,就会 报undefined
undefined
==对象==
对象是大括号,数组是中括号
每个属性之间使用逗号隔开,最后一个属性不需要逗号
//示例
// Person person = new Person(1,2,3,4,5);
var person = {
name:'Tom',
age:3,
tags:['js','java','web','...']
}
取对象值
//控制台操作
person.name
> "Tom"
person.age
> 3
严格检查格式
为什么(要引入严格检查格式)?
var i =1;
默认为全局变量,一个html文件会引用多个script,直接使用var定义变量可能会与其他同名变量产生覆盖或冲突。
怎么(引入严格检查格式)?
1、需要设置支持ES6语法
(以IDEA编译器为例)
2、写入'use strict';
=='use strict';必须写在JavaScript的第一行!==
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--
前提:IDEA需要设置支持ES6语法
'use strict';严格检查模式,预防JavaScript的随意性导致产生的一些问题
必须写在JavaScript的第一行!
局部变量建议都使用let去定义~
-->
<script>
'use strict';
//全局变量
let i=1
//ES6 let
</script>
</head>
<body>
</body>
</html>
3、将var i =1; 改为 let i =1;
可能出现的bug!!!
1、
原因:
未设置支持ES6语法
2、
//示例
<script>
//全局变量
i=1 //出错点
'use strict';
</script>
但Console(控制台)无报错
原因:
'use strict';未放在JavaScript的第一行!
3、
//示例
<script>
'use strict';
//全局变量
i=1
//ES6 let
</script>
结果
原因:
变量定义不符合严格检查格式
解决办法:
将i =1; 改为 let i =1; 变量前加上let
数据类型
1、字符串
==注意转义字符 \ ==
\u4e2d \u##### Unicode字符
\x41 Ascall字符
==多行字符串编写==
//tab 上面 esc下面
var msg =
`hello
world
你好呀
nihao
`
==模板字符串==
//tab 上面 esc下面
let name = 'Tom';
let age = 3;
var msg = `你好,${name}`
==字符串的可变性,不可变==
==大小写转换==
//注意,这里是方法,不是属性了
student.toUpperCase();
student.toLowerCase();
==student.indexof(‘t’)==
输出含‘t’字符的下标
==substring,从0开始==
[) //包含左边不包含右边
student.substring(1)//从第一个字符串截取到最后一个字符串
student.substring(1,3)//[1,3)
2、数组
1、arr.length
==注意:假如给arr.length赋值,数组大小就会发生变化~,如果赋值过小,元素就会丢失==
2、indexOf,通过元素获得下标索引
arr.indexOf(下标)
3、slice(),截取Array的一部分,返回的一个新数组,类似于String中substring
4、push(),pop()尾部
push:压入到尾部
pop:弹出尾部的一个元素
疑问1:是否可以push(),pop()具体某个数值?
这两个方法只能遵循“后进先出”原则
==注意:==
pop一次只能出一个
push一次可推多个
5、unshift(),shift() 头部
unshift:压入到头部
shift:弹出头部的一个元素
6、元素反转reverse()
7、concat()
==注意:concat()并没有修改数组,只是会返回一个新的数组==
8、连接符join
9、多维数组
arr = [[1,2],[3,4],["5","6"]] \\创建 多维数组
arr[1][1] \\取多维数组元素
>4
3、对象
若干个键值对
var 对象名 = {
属性名:属性值,
属性名:属性值,
属性名:属性值
}
//定义了一个person对象,它有四个属性
var person = {
name:"Tom",
age:3,
email:"123456798@QQ.com",
score:66
}
==Js中对象,{…}
表示一个对象,建制对描述属性xxx:xxx,多个属性之间用逗号隔开,最后一个属性不加逗号==
==JavaScript中的所有的键都是字符串,值是任意对象!==
1、对象赋值
2、使用一个不存在的对象属性,不会报错!undefined
3、动态的删减属性,通过delete删除对象的属性
格式:
delete 对象名.属性名
示例:
4、动态的添加,直接给新的属性添加值即可
格式:
对象名.新属性名 = 新属性值
示例:
5、判断属性值是否在这个对象中!xxx in xxx
示例:
4、流程控制
if...else语句、while循环、do...while循环、for循环语法就不多赘述了
==注意:==
1、while死循环只能关闭浏览器解决
2、for循环控制变量定义用let
forEach循环
ES5.1特性
for …in方法
5、Map和Set
ES6的新特性~
Map 形式为[key,value]的数组。
//构造示例
var map = new Map(['tom',100],['jack',90],['haha',80]]);
//通过key获得value
var name = map.get('tom');
//新增或修改
map.set('admin',123456);
//删除
map.delete("tom");
Set:无序不重复的集合(Set中的元素只会出现一次,即 Set 中的元素是唯一的。)
//添加
set.add(2);
//删除
set.delete(1);
//是否 包含某个元素
console.log(set.has(3));
6、iterator
==for···in与for···of的区别==
//for...in示例
var arr = [3,4,5]
for(var x in arr){
console.log(x)
}
//控制台输出下标
0,1,2
//for...of示例
var arr = [3,4,5]
for(var x in arr){
console.log(x)
}
//控制台输出数据
3,4,5
遍历Map
示例:
遍历set
示例:
函数
==函数与对象的区别==
两个一样,只是放的位置不同
1、定义函数
定义方式一
示例:
//绝对值函数
function abs(x){
if(x>=0){
return x;
}else{
return -x;
}
}
==如果没有执行return,函数执行完也会返回结果,结果就是undefined==
定义方式二
示例:
var abs = function(x){
if(x>0){
return x;
}else{
return -x;
}
}
==function(x){…}
这是一个匿名函数。但是可以吧结果赋值给abs,通过abs就可以调用函数!==
方式一和方式二等价!
==参数问题:javaScript可以传任意个参数,也可以不传递参数~==