一、什么是 JavaScript?
1.1、概述
JavaScript是一门世界上最流行的脚本语言,是Brendan Eich花了10天时间就被创造出来了,与Java没啥关系,这名字就是为了蹭热度。
一个合格的后端人员,必须要精通 JavaScript
运行环境是:浏览器
解释性的语言
每次刷新页面,js代码都会执行,从上到下,依次执行
所以处理dom树操作的时候,要把js代码放在后面
当直接通过url来直接访问js代码时,会输出纯文本的内容,因为唯有script标签
1.2、历史
ECMAScript它可以理解为是JavaScript的一个标准
最新版本已经到es6版本~但是大部分浏览器还只停留在支持 es5 代码上!
开发环境—线上环境,版本不一致
二、快速入门(大致了解一下)
js可以与html代码混编,可以出现在任何位置
2.1、引入JavaScript的两种方法
JavaScript也是要与html代码连接起来的,下来我们就说一下这个连接方法!
方法一:内部标签
将js代码与html代码写一块
test.html
<script>
//js代码
</script>
方法二:外部引入
将js代码与html代码分开来写
例如js代码名为
abc.js
//js代码
test.html
<script src="abc.js"></script>
完整代码演示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--
内部引用:
script标签内,写Javascript代码
<script>
alert('hello,world');
</script>
-->
<!--外部引入-->
<!--注意:script标签必须成对出现-->
<script src="js/abc.js"></script>
<!--不用显示定义type,也默认就是 javascript,就不用管了,删掉就行-->
<!--
<script type="text/javascript"></script>
-->
</head>
<body>
<!--这里也可以存放-->
</body>
</html>
2.2、基本语法入门
大家可能注意到了上面代码中的alert('hello,world');
这是什么意思呢?他其实就是一个网页上的弹窗,大家都不陌生吧。
<!--JavaScript严格区分大小写!-->
<script>
// 1. 定义变量 变量类型 变量名 = 变量值;
var 王者荣耀="倔强青铜";
// 2. 条件控制
alert(王者荣耀);
if (王者荣耀==="倔强青铜"){
alert("我很强!");
}
console.log("找到我了吗?");
//console.log(score) 在浏览器的控制台打印变量! 相当于System.out.println();
/*
* asdasdasd
* */
</script>
大家第一次接触可能看不懂,不过没关系接下来都会说的。
前面说了,他是花了10天就被创造出来的语言,所以他很随意,随意到什么程度呢?
他的所有变量的数据类型都用var来表示,学过Java的小伙伴学这个就会很轻松了~
中英文符号一定不要搞混了呀!!!
运行结果:
当然,大家也可以直接在控制台上输入代码!
还可以通过http的方式引入js代码:比如百度
2.3、数据类型
数值,文本,图形,音频,视频……
变量
var 王者荣耀 = "倔强青铜";//用var来声明变量,未声明会报undefined未定义
王者荣耀 = "荣耀王者";//重新赋值
数字
js不区分小数和整数,Number
123 //整数123
123.1 // 浮点数123.1
1.123e3 //科学计数法
-99 //负数
NaN // not a number
Infinity //表示无限大
字符串
’abc‘
“abc”
//双引,单引都可以
布尔值
true , false
逻辑运算
&& 两个都为真,结果为真
|| 一个为真,结果为真
! 真即假,假即真
比较运算符!重要!
一定不要搞混了呀!这是一个JS的缺陷,坚持不要使用 == 比较
=
== 等于(类型不一样,值一样,也会判断为true)
=== 绝对等于(类型一样,值一样,结果true)
注意:NaN===NaN ,这个与所有的数值都不相等,包括自己
只能通过 isNaN(NaN) 来判断这个数是否是 NaN
浮点数问题:
console.log((1/3) === (1-2/3)) //为false
尽量避免使用浮点数进行运算,存在精度问题!
Math.abs(1/3-(1-2/3))<0.00000001
null 和 undefined
null //空,什么都没有
undefined //未定义
数组
Java的数值必须是相同类型的对象~,JS中不需要这样!var可以代表所有数据类型嘛!
//保证代码的可读性,尽量使用 []
var arr1 = [1,2,3,4,5,'hello',null,true];//一般这样写
var arr2 =new Array(1,12,3,4,4,5,'hello');
//取数组下标:如果越界了,就会 undefined
对象
对象是大括号,数组是中括号~~
每个属性之间使用逗号隔开,最后一个不需要添加
//Person person = new Person(1,2,3,4,5);
var person = {
name: "亚瑟",
age: 28,
tags: ['圣光守护','誓约之盾','回旋打击','圣剑裁决']
}
取对象的值
这个值就是这样取的,是不是很简单呢。
2.4、严格检查格式
在IEDA里面要把es版本调到es6
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--
前提:IEDA 需要设置支持ES6语法
'use strict'; 严格检查模式,预防JavaScript的随意性导致产生的一些问题
必须写在JavaScript的第一行!
局部变量建议都使用 let 去定义~
-->
<script>
'use strict';
// 全局变量
let i = 1;
// ES6 let
</script>
</head>
<body>
</body>
</html>
在es6 使用var它底下会画个灰色波浪线,就是不建议使用
至于什么时候使用let或const,下篇讲~
三、数据类型(深入了解)
3.1、字符串
1、 正常字符串我们使用 单引号,或者双引号包裹
2、注意转义字符 \
\'
\n
\t
\u4e2d \u#### Unicode字符
\x41 Ascll字符
这些都比较通用,就不解释了,应该能看懂吧~
3、多行字符串编写
//tab 上面 esc键下面
var msg =
`hello
world
你好ya
你好`
4、模板字符串
就是还可以这样来玩!
//tab 上面 esc键下面
let name = "hhh";
let age = 3;
let msg = `你好呀,${name}`
5、字符串长度
str.length
6、字符串的可变性,不可变
就是上面我们想把student字符串第一位改为1,实际上是没有改成功的,他是不可变的!
7、大小写转换
//注意,这里是方法,不是属性了
student.toUpperCase()
student.toLowerCase()
8、查索引
student.indexOf('t')
9、substring
[)//意思是含头不含尾 很耳熟吧~ 注意:里面数字代表索引
student.substring(1) // 从1索引处截取到最后一个字符串
student.substring(1,3) //[1,3)
大家下去可以多练习,只有自己尝试过了,才能更好的记住!
3.2、数组
Array可以包含任意的数据类型
var arr = [1,2,3,4,5,6] ; //通过下标取值和赋值
arr[0]
arr[0] = 1
1、长度
arr.length
注意:加入给 arr.length 赋值,数组大小就会发生变化~,如果赋值过小,元素就会丢失
2、indexOf,通过元素获得下标索引
arr.indexOf(2)
>1
字符串的 “1” 和数字 1 是不同的
3、slice() 截取Array的一部分,返回一个新数组,类似于String中的 substring
4、push(),pop() 尾部
push: 压入到尾部
pop: 弹出尾部的一个元素
5、unshift() , shift() 头部
unshift: 压入到头部
shift: 弹出头部的一个元素
6、排序 sort()
(3) ["B", "C", "A"]
arr.sort()
(3) ["A", "B", "C"]
7、元素反转 reverse()
(3) ["A", "B", "C"]
arr.reverse()
(3) ["C", "B", "A"]
8、concat()
(3) ["C", "B", "A"]
arr.concat([1,2,3])
(6) ["C", "B", "A", 1, 2, 3]
arr
(3) ["C", "B", "A"]
注意: concat()并没有修改数组,只是会返回一个新的数组
9、连接符 join
打印拼接数组,使用特定的字符串连接
(3) ["C", "B", "A"]
arr.join('-')
"C-B-A"
10、多维数组
arr = [[1,2],[3,4],["5","6"]];
arr[1][1]
>4
数组:存储数据 (如何存,如和取,方法都可以自己实现!)
3.3、对象
若干个键值对
var 对象名 = {
属性名: 属性值,
属性名: 属性值,
属性名: 属性值
}
//定义了一个person对象,它有四个属性!
var person = {
name: "kuangshen",
age: 3,
email: "24736743@qq.com",
score: 0
}
Js中对象, {……} 表示一个对象, 键值对描述属性 xxxx:xxxx,多个属性之间使用逗号隔开,最后一个属性不加逗号!
JavaScript中的所有的键都是字符串,值是任意对象!
1、 对象赋值
person.name = "亚瑟"
"亚瑟"
person.name
>"亚瑟"
2、使用一个不存在的对象属性,不会报错! undefined
person.haha
undefined
3、动态的删减属性,通过 delete 删除对象的属性
delete person.name
true
person
4、动态的添加,直接给新的属性添加值即可
person.haha = "haha"
"haha"
person
5、判断属性值是否在这个对象中! xxx in xxx!
'age' in person
true
//继承
'toString' in person
true
6、 判断一个属性是否是这个对象自身拥有的 hasOwnProperty()
person.hasOwnProperty('toString')
false
person.hasOwnProperty('age')
true
3.4、流程控制
if 判断
var age = 3;
if (age>3){ //第一个判断
alert("haha");
}else if(age<5) { //第二个判断
alert("hehe");
}else { //否则,,
alert("heihei");
}
while循环,避免程序死循环
while(age<100){
age = age + 1;
console.log(age)
}
do{
age = age + 1;
console.log(age)
}while(age<100)
for循环
for (let i = 0; i < 100 ; i++) {
console.log(i)
}
forEach 循环
5.1 引入
var age = [12,3,12,3,12,3,12,31,23,123];
//函数
age.forEach(function (value) {
console.log(value)
})
for…in
//for(var index in object){}
for(var num in age){
if (age.hasOwnProperty(num)){//过滤掉对象继承的属性
console.log("存在")
console.log(age[num])
}
}
3.5、Map 和 Set
ES6 的新特性~
Map
//ES6 Map
//学生的成绩,学生的名字
// var names = ["tom","jack","haha"];
// var scores = [100,90,80];
var map = new Map([['tom',100],['jack',90],['haha',80]]);
var name = map.get('tom'); //通过key获得value!
map.set('admin',123456); //新增或修改!
map.delete("tom"); //删除!
Set:无序不重复的集合
set.add(2); //添加!
set.delete(1); //删除!
console.log(set.has(3)); //是否包含某个元素!
3.6、iterator
es6 新特性
遍历数组
//通过for of / for in 下标
var arr = [3,4,5]
for (var x of arr){
console.log(x)
}
遍历map
var map = new Map([["tom",100],["jack",90],["haha",80]]);
for (let x of map){
console.log(x)
}
遍历set
var set = new Set([5,6,7]);
for (let x of set) {
console.log(x)
}
学习JavaScript大多要在浏览器控制台上进行调试,大家没事可以多玩玩这个控制台,反正也玩不坏~
这次就先分享到这,下篇见~