什么是JavaScript?
JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web,更可广泛用于服务器、PC、 笔记本电脑、平板电脑和智能手机等设备。
JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言,开发者用了十 天时间,公司为网景。
- JavaScript 是一种轻量级的编程语言。
- JavaScript 是可插入 HTML 页面的编程代码。
- JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。 JavaScript 很容易学习
快速入门
- 内部引入
<script>
alert("hello world");
</script>
- 外部引入
<script src="./01file.js"></script>
语法
JavaScript严格区分大小写
变量的定义
变量类型 变量名 = 变量值
变量名:不能以数字开头,$、数字、字符、_组合。不能使用中文
<script>
//1.变量定义
var source = 1;
alert(num);
</script>
条件判断
if、if-else、if-else if- else
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
<script>
//2.条件判断
var source = 79;
if(source > 60 && source < 70){
alert("60~70");
}else if(source > 70 && source < 80){
alert("70~80");
}else{
alert("other");
}
</script>
</head>
<body>
</body>
</html>
console.log() 可在浏览器中的console中进行输出变量
数据类型
数值、文本、图片、音频、视频等等
-
number 数字
- 不区分小数和整数
- NaN 通常用来判断一个变量是否是一个数字类型的值
-
字符串
- 单引号或双引号包裹
-
多行字符串
-
var msg = ` hello world nihao `
-
-
模板字符串
-
<script type="text/javascript"> var name = "xbxaq.com"; var msg = `你好,${name}`; </script>
-
-
转义字符,\
- \n 换行
- \t 制表符
- \u4e2d
-
字符串长度
-
<script type="text/javascript"> var name = "xbxaq.com"; var msg = `你好,${name}`; console.log(msg.length) </script>
-
-
字符串中取N个字符
-
<script type="text/javascript"> var name = "xbxaq.com"; var msg = `你好,${name}`; console.log(str[1])--从零开始计数,截取第一个字符 </script>
-
-
大小写转换
-
//这里是方法,不是属性 console.log(name.toUpperCase()) // 大写 XBXAQ.COM console.log(name.toLowerCase()) //小写
-
-
获取字符在字符串中的下标
- console.log(msg.indexOf(‘b’))
-
字符串截取
- console.log(msg.substring(1,4)) 包前不包后
-
布尔值
- true、false
-
逻辑运算
- && 两个都为真,结果为真
- || 一个为真,结果为真
- ! 真即是假,假即是真
-
比较运算符
- = 赋值
- == 等于(类型不一样,值一样)
- === 绝对等于(类型一样,值一样)
- NaN === NaN 与所有的值都 不相等,包括它自己
- isNAN( ) — 是否为空
数组
数组中可以包含任意的数据类型
var arr = [1,2,3,4,5,6adfadf];
-
取数组长度
- arr.length
- arr.length=2
- 给arr.length赋值,数组大小会发生变化
-
字符在数组中的下标索引 indexOf
- console.log(arr.indexOf(2))
-
slice() 截取数组的一部分,返回一个新的数组,类似于substring方法
- onsole.log(arr.slice(1,3))
-
push、pop、unshift()、shift()
-
//push() 将新的元素加入到数组末尾 //pop() 将元素从数组的尾部去除 //unshift() 将新的元素加入数组的头部 //shift() 弹出数组中的头部一个元素 console.log(arr.push(99)) console.log(arr.pop()) console.log(arr.unshift(97)) console.log(arr.shift())
-
-
排序、正序 sort()
- console.log(arr.sort())
-
元素反转 reverse()
- console.log(arr.reverse())
-
拼接数组后,返回一个新的数组 concat()
- console.log(arr.concat([33,44,55]))
-
连接符,join(),使用特定符号打印拼接数组
- console.log(arr.join(“@”))
-
多维数组
-
var arr = [[1,2,3,4,5],[2,3,4,5,6]]
-
对象
var 对象名 = {
属性名:属性值,
属性名:属性值,
属性名,属性值
}
JavaScript中所有的属性名都是字符串,属性值可以是任意类型
-
读取对象的值
-
person.name 'xbxaq.com' person.age 10 对象.属性名
-
-
对象属性重新赋值
-
person.name="张三" '张三' person.name '张三'
-
-
使用不存在的属性,不会报错
-
person.nana undefined
-
-
动态添加属性
-
person.nana="123" '123' person.nana '123'
-
-
动态的删减属性 delete person. nana
-
person {name: '张三', age: 10, email: 'xbxaq@qq.com', nana: '123'} delete person. nana true person {name: '张三', age: 10, email: 'xbxaq@qq.com'}
-
-
判断属性值是否在对象中 xxx in 数组名
-
'age' in person true 'ageaaa' in person false 注意:in 找是否继承了父类的方法
-
-
判断一个属性是否是这个对象自身拥有的 hasOwnProperty(()
-
person.hasOwnProperty("phone") false person.hasOwnProperty("age") true
-
流程控制
if 语句
<script type="text/javascript">
var age = 3;
if(age < 10){
alert("哈哈");
}else {
alert("GG");
}
</script>
while循环
<script type="text/javascript">
var age = 3;
while(age < 5){
age = age + 1;
alert(age);
}
</script>
for循环
for(var i = 0; i < 10;i++){
console.log(i);
}
函数
定义方法:
function 函数名(参数){
代码块;
}
var 函数名 = function(参数){
代码块;
}
绝对值函数
<script type="text/javascript">
function abs(x){
if(x >= 0){
return x;
}else{
return -x;
}
}
</script>
注意:一旦执行到return代表函数结束,返回结果;如果没有执行到return,函数执行完也会返回结
果,结果就是undefined
函数的调用
abs(10)
10
abs(-10)
10
变量的作用域
function a(){
var x = 1;
function b(){
var x = 'A';
console.log("inner: " + x);
}
console.log("outer: " + x);
b();
}
a();
养成规范:所有的变量定义都会放在函数的头部,便于代码维护
全局变量
默认所有的全局变量都会自动绑定在Windows对象下
<script type="text/javascript">
var x = 1;
function f(){
console.log(x)
}
f();
console.log(x);
</script>
局部作用域 let
<script type="text/javascript">
function a(){
for(var i = 0; i < 100; i++){
console.log(i);
}
console.log(i + 1);//i出了作用域还可以使用
}
a();
</script>
结果 101
let
<script type="text/javascript">
function a(){
for(let i = 0; i < 100; i++){
console.log(i);
}
console.log(i + 1);
}
a();
</script>
结果:Uncaught ReferenceError: i is not defined
方法
方法就是把函数放在对象里面,对象只有属性和方法
<script type="text/javascript">
var xbxaq = {
name: "张三",
birth: 2000,
age: function(){
var now = new Date().getFullYear(); //获取当前的完整年份
r eturn now - this.birth;
}
}
xbxaq.age() 调用
</script>
面向对象编程
什么是面向对象?
若干属性的集合
什么是原型?
原型是一个对象,其他对象可以通过它实现继承。
类:一个模板
对象:具体的实例
<script type="text/javascript">
var user = {
name: "小红",
age: 3,
addr: "四川省成都市",
run: function(){
console.log(this.name + "Run......");
}
}
var xiaoming = {
name: "小明"
}
xiaoming.__proto__ = user;
小明继承user 的属性
</script>
结果:console.log(xiaoming.run())
小明Run......
class 对象 ES6之后引入
定义一个类,属性,方法
<script type="text/javascript">
class Student{
constructor(name){
this.name = name;
}
hello(){
alert("hello");
}
}
var xiaoming = new Student("xiaoming");
</script>
继承
<script type="text/javascript">
class Student{
constructor(name){
this.name = name;
}
hello(){
alert("hello");
}
}
class Hacker extends Student{
constructor(name,id){
super(name);
this.id = id;
}
Hack(){
alert("我是一名白帽子");
}
}
var xiaoming = new Student("xiaoming",1);
var xiaohong = new Hacker("xiaohong");
</script>
congsole.log(xiaoming.Hacker())
操作BOM对象
BOM:浏览器对象模型
B/S架构
B/S架构即浏览器和服务器架构模式
简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本
Window对象
Window 代表 浏览器 窗口
1、Navigator 封装了浏览器的信息
// 获取当前浏览器内核
navigator.userAgent
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/108.0.0.0 Safari/537.36'
//运行浏览器的操作系统和(或)硬件平台
navigator.platform
'Win32'
//返回浏览器的平台和版本信息
navigator.appVersion
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/108.0.0.0 Safari/537.36'
2、screen 屏幕属性
//屏幕宽度 高度
screen.width
2048
screen.height
1280
3、location 当前URL信息
host: "www.baidu.com"
href: "https://www.baidu.com/"
protocol: "https:"
reload: ƒ reload()
//设置新的地址
location.assign("https://xbxaq.com")
4、ducument 表示当前页面,HTML DOM文档树
//获取title
document.title
'小明从零开始学安全 - 持续分享'
可获取具体的文档树节点
5、history 浏览器历史记录
history.back() //后退
history.forward() //前进
操作DOM对象
DOM:文档对象模型
浏览器网页就是一个DOM树形结构
更新:更新一个DOM节点
遍历DOM节点:得到DOM节点
删除:删除一个DOM节点
添加:添加一个DOM节点
要操作一个DOM节点,就必须要先获得这个DOM节点
获取DOM节点
<h1>标题1</h1>
<p id = "p1">p1</p>
<p class = "p2">p2</p>
var h1 = document.getElementsByTagName('h1'); //获取标签
var p1 = document.getElementById('p1'); //获取ID块
var p2 = document.getElementsByClassName('p2'); //获取类块
更新DOM节点
1、innerText 修改文本值
document.getElementById('p1').innerText='xbxaq.com';
2、innerHtml 修改HTML值,可以解析文本标签
document.getElementById('p1').innerHTML="<h1>ww.baidu.com</h1>";
3、操作JS
document.getElementById('p1').style.color="red";
document.getElementById('p1').style.fontSize='40px';
删除DOM节点
删除节点步骤:先获取父节点,再删除自己
<div id="father">
<h1>标题1</h1>
<p id = "p1">p1</p>
<p class = "p2">p2</p>
</div>
删除代码
//通过父节点 删除子节点
document.getElementById("father").removeChild(p1);
注意:删除多个子节点时,children是在时刻变化的
插入DOM节点
获得某个DOM节点,如果该DOM节点是空的,可通过innerHTML可以增加一个元素;如果该DOM节点 已经存在元素,则不能进行该操作,会产生覆盖
特殊对象-内部类
typeof 检查数据类型
typeof 123
"number"
typeof '123'
"string"
typeof true
"boolean"
typeof NaN"
number"
typeof []
"object"
typeof {}
"object"
typeof Math.abs
"function"
typeof undefined
"undefined"
Date 日期类型
var now = new Date();//sat Jan 04 2020 10:47:06 GMT+0800 (中国标准时间)
now.getFu11Year();//年
now.getMonth();//月 0~11 代表月
now.getDate();//日
now.getDay();//星期几
now.getHours();// 时
now.getMinutes();//分
now.getseconds();//秒
now.getTime();// 时间戳全世界统一1970 1.1 0:00:00毫秒数
console.log(new Date(1578106175991))//时间戳转为时间