JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
javascript组成一个完整的 JavaScript 实现是由以下 3 个不同部分组成的:
JavaScript核心(ECMAScript)、文档对象模型(Document Object Model,简称DOM)、浏览器对象模型(Browser Object Model,简称BOM)。
<script> </script>
abc.js
js里面只写位于script你里面的文件。
引入文件放在同一目录下,不用写包名。
<script scr="abc.js"></script>

js划分不细致
123 //整数123
123.5 //小数123.5
1.2555e5 //科学计数法
-5213 //负数
NaN //not a number
Infinity //表示无限大
数值、文本、图形、音频·、视频…
=&& 全真为真。全假为假
|| 一个为真结果为真
! 真即是假,假即为真
== 等于(类型不一样,值一样也会判断为true)
=== 绝对等于(类型一样,值一样,结果为true)
1. NaN==NaN,这个和所有的数值都不相等,包括自己
2. 只能通过isNaN(NaN)来判断这个数是否为NaN
'' ""两种格式包括,
其他的类型用“\.”
| \’ | 输出特殊符号 |
|---|---|
| \n | 换行 |
| \t | tab同功能 |
| \u4e2d | \u#### Unicode字符 |
| \x41 | Ascll字符 |
//在tab键的上面 esc键下面
'use scrict';
let msg = `你好呀
hello
world`
console.log(msg);
let name = "sunwukong";
let age = 3;
let mes = `你好呀 ${name}`
长度
console.log(student.length)
大小写转换
console.log(student.toUpperCase()) //STUDENT
console.log(student.toLowerCase()) //student
student.indexOf(‘t’) 输出在字符串中的位置
substring 截取字符串
student.substring(1) //从第一个字符串截取到最后一个字符串
student.substring(1,3) //[1,3) 含头不含尾
防止出现的精度问题
console.log((1/3)===(1-(2/3))) //false
console.log(Math.abs(1/3-(1-2/3))<0.000001); //true
(可以包含所有数据类型)
null 空
undefined 未定义(但凡对于编译器来说未知的就undefined)
//为了保证代码的可读性,尽量使用[]
var arr = [1,2,3,null,true,'hello'];
new Array (1,12,15,166,255,'world');
arr.length
**注意**:加入给arr.length赋值,数组大小就会发生变化,如果赋值元素过小,元素就会丢失
arr.indexOf(3) //2 indexOf 通过元素获得下标索引
字符串的“1”和数字1是不一样的
slice() 截取Array的一部分,返回一个新数组,类似于String里的substring
pash() , pop 尾部
pash: 压入到尾部
pop : 弹出尾部的一个元素
pash: 压入到尾部
pop : 弹出尾部的一个元素
unshift() ,shift() 头部
unshift: 压入到头部
shift: 弹出头部的一个元素
排序
arr
(3) ["b", "c", "a"]
arr.sort()
(3) ["a", "b", "c"]
元素反转 resverse
(3) ["a", "b", "c"]
arr.reverse()
(3) ["c", "b", "a"]
concat()
arr.concat([1,2,3])
(6) ["c", "b", "a", 1, 2, 3]
arr
(3) ["c", "b", "a"]
concat()并没有修改数据,只是会返回一个新的数组
连接符 join
(3) ["a", "b", "c"]
arr.join('-')
"c-b-a"
多维数组
var arr = [[1,2],[3,4],[5,6]]
undefined
arr[1][1]
4
arr
(3) [Array(2), Array(2), Array(2)]
0: (2) [1, 2]
1: (2) [3, 4]
2: (2) [5, 6]
length: 3
’use strict’; 严格检查模式,预防JavaScript的随意性产生的一些问题
必须写在JavaScript的第一行
局部变量建议使用let去定义
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--
前提:IEDA需要设置支持es6语法
'use strict';严格检查模式,预防JavaScript的随意性产生的一些问题
必须写在JavaScript的第一行
局部变量建议使用let去定义
-->
<script>
'use strict';
let j = 1;
</script>
</head>
<body>
</body>
</html>
对象是大括号。数组是中括号
每一个属性之间使用逗号隔开,最后一个不需要添加
var 对象名 = {
属性名1 : 属性值1,
属性名2 : 属性值2,
属性名3 : 属性值3
}
//定义了一个person对象,它有四个属性
var person = {
name : "xiaoming",
age : 5,
email : "378214218@qq.com",
score : 60
}
JavaScript中对象,{…}表示一个对象,键值对描述属性 xxx : xxx 多个属性之间使用逗号隔开,最后一个不加逗号
JavaScript中所有的键都是字符串,值是任意对象!
对象赋值
person.age = 76
76
person.age
76
person.haha
undefined
delete person.score
true
person
{name: "xiaoming", age: 76, email: "378214218@qq.com"}
person.haha = "haha"
"haha"
person
{name: "xiaoming", age: 76, email: "378214218@qq.com", haha: "haha"}
'age' in person
true
//继承
'toString' in person
true
person.hasOwnProperty('age')
true
person.hasOwnProperty('jah')
false
与java一致
forEach
var age=[1,45,5,45,5,3453];
//函数
age.forEach(function (value){
console.log(value)
})
forin
age是索引而已
for(var index in object){}
for(var num in age)
{
if(age.hasOwnProperty(num))
{
console.log("ok");
console.log(age[num]);
}
//map=字典
var map=new Map([['tom',100],['jack',30]]);//相当于pythen里面的字典
var name= map.get('tom');//通过key获得value的值
map.set('zhongshan',45);//增加或修改
map.delete("tom");
console.log(name);
console.log(map);
set
// set 去重
var set=new Set([4,3,2,1,1,1]);
// console.log(set);
set.delete(1);//删除
set.add(7);//添加
set.has(3);//是否包含某元素
遍历数组
//通过for of / for in 下标
let arr = [3,4,5]
for(let x of arr){
console.log(x);
}
map
let map = new Map([['tom',100],['jerry',90],['andy',80]]);
for(let x of map ){
console.log(x);
}
遍历set
let set = new Set([5,6,7]);
for(let x of set){
console.log(x);
}
关键字function
方式1。
function abs(x){
if(x >= 0){
return x;
} else {
return -x;
}
}
方式2
var abs = function(x){
if(x >= 0){
return x;
} else {
return -x;
}
}
在GS中一般不会主动报错。即便传了多个参数也不会。如何规避或者知道传进来的参数有哪些?
手动抛出异常。
var abs = function (x){
//手动抛出异常来判断
if(typeof x!== 'number'){
throw 'Not a Number';
}
if(x >= 0){
return x;
} else {
return -x;
}
}
arguments
arguments是一个JS免费赠送的关键字;
代表,传递进来的所有的参数,是一个数组!
var abs = function (x){
console.log("x=>"+x);
for(let i = 0; i< arguments.length;i++){
console.log(arguments[i]);
}
if(x >= 0){
return x;
} else {
return -x;
}
}
rest 获取除了已经定义的参数之外的所有参数~
function aaa(a,b,...rest){
console.log("a=>"+a);
console.log("b=>"+b);
console.log(rest);
}
在javascript中,var定义变量实际是有作用域的。假设在函数体中声明,则在函数体外不可以使用
function qj(){
var x = 1;
x = x + 1;
}
x = x + 2; //Uncaught ReferenceError: x is not defined
如果两个函数使用了相同的变量名,只要在函数内部,就不冲突(内部函数可以访问外部函数的成员,反之则不行)
function qj(){
var x = 1;
x = x + 1;
}
function qj2(){
var x = 'A';
x = x + 1;
}
假设在JavaScript 中 函数查找变量从自身函数开始~,由’内’ 向 '外’查找,假设外部存在这个同名的函数变量,则内部函数会屏蔽外部函数的变量。
定义变量要定义在函数的最前面。虽然GS会自动提升。但不会提升变量的赋值
function qj(){
var x = 1;
//内部函数可以访问外部函数的成员,反之则不行
function qj2(){
var y = x + 1; //2
}
var z = y + 1; //Uncaught ReferenceError: y is not defined
}
全局变量
//全局变量
x = 1;
function f(){
console.log(x);
}
f();
console.log(x);
全局对象window
var x = 'xxx';
alert(x);
alert(window.x);//默认所有的全局变量,都会自动绑定在window对象下;
alert()这个函数本身也是一个window的变量
var x = 'xxx';
window.alert(x);
var old_alert = window.alert;
//old_alert(x);
window.alert = function(){
};
//发现 alert() 失效了
window.alert(123);
//恢复
window.alert = old_alert;
window.alert(456);
function qj(){
var x = 1;
function qj2(){
var x = 'A';
console.log('inner'+x); //innerA
}
qj2();
console.log('outer'+x); //outer1
}
qj();
javascript实际上只有一个全局作用域,任何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域都没有找到,就会报错Refrence
方法就是把函数放在对象里面。this默认指向调用他的那个对象。
let zhang = {
name:'张',
birth:2000,
age:function (){
//今年-出生的年
let now = new Date().getFullYear()
return now - this.birth;
}
};
//属性
zhang.name
//方法,一定要带()
zhang.age()
this
function getAge(){
//今年-出生的年
let now = new Date().getFullYear()
return now - this.birth;
}
let zhang = {
name:'张',
birth:2000,
age:getAge
};
//zhang.age() OK
//getAge() NaN this指向window,不存在getAge()函数
function getAge(){
//今年-出生的年
let now = new Date().getFullYear()
return now - this.birth;
}
let zhang = {
name:'张',
birth:2000,
age:getAge
};
//zhang.age() OK
//this指向了zhang,参数为空
getAge.apply(zhang,[]);
let date = new Date();
date.getFullYear(); //年
date.getMonth(); //月 0~11
date.getDate(); //日
date.getDay(); //星期几
date.getHours(); //时
date.getMinutes(); //分
date.getSeconds(); //秒
date.getTime(); //时间戳 毫秒数
转化
//时间戳转换为本地时间
console.log(new Date(121232121231321));
Date Wed Sep 11 5811 21:13:51 GMT+0800 (中国标准时间)
date.toLocaleString()
"2021/4/13 下午7:28:31"
date.toLocaleDateString()
"2021/4/13"
setInterval() - 间隔指定的毫秒数不停地执行指定的代码。
clearInterval() - 方法用于停止 setInterval() 方法执行的函数代码。
setTimeout() - 在指定的毫秒数后执行指定代码。
JSON(JavaScript Object Notation,JS对象简谱)是一种轻量级的数据交换格式。
简洁和清晰的层次结构使得JSON成为理想的数据交换语言。
易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
let user = {
name:'zhang',
age:3,
sex:'男'
};
//对象转换为JSON字符串
let jsonUser = JSON.stringify(user)
console.log(jsonUser); //{"name":"zhang","age":3,"sex":"男"}
//JSON字符串转换为对象,参数为JSON字符串
let json = JSON.parse('{"name":"zhang","age":3,"sex":"男"}');
console.log(json); //Object { name: "zhang", age: 3, sex: "男" }
区别
var obj = {a:'hello',b:'springmvc'}
var json = {"a":"hello","b":"springmvc"}
<script>
'use strict'
class Student {
//有参构造
constructor(name) {
this.name = name;
}
//方法
hello(){
alert("hello")
}
}
let xm = new Student("小明")
xm.hello()
</script>
继承
<script>
'use strict'
class Student {
//有参构造
constructor(name) {
this.name = name;
}
//方法
hello(){
alert("hello")
}
}
class xiaoStudent extends Student{
constructor(name,grade) {
super(name);
this.grade = grade;
}
MyGrade(){
alert("小学生")
}
}
let xxs = new xiaoStudent("zfstart",21)
</script>
JS的诞生就是为了能够让他在浏览器中运行
BOM:浏览器对象模型
winder
//浏览器外部高度
window.outerHeight
804
//浏览器外部宽度
window.outerWidth
699
//浏览器内部高度
window.innerHeight
101
//浏览器内部宽度
window.innerWidth
688
navigator
navigator,封装了浏览器的信息
一般情况下我们不会用,因为会被人修改。
navigator.appName
"Netscape"
navigator.userAgent
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0"
navigator.platform
"Win32"
screen
screen.width
1536 px
screen.height
864 px
location(重要)
location代表当前页面的URL信息
host:"www.baidu.com" //主机
href:"https://www.baidu.com/" //当前指向的位置
protocol:"https:" //协议
reload:f reload() //刷新页面
location.assign("https://www.qq.com") //转向新的地址
document
document代表当前页面
document.title
"百度一下,你就知道"
document.title='狂神说'
"狂神说"
获取具体的文档树节点
<dl id = "app">
<dt>JAVA</dt>
<dd>javaSE</dd>
<dd>javaEE</dd>
</dl>
<script>
let dl = document.getElementById("app");
</script>
获取cookie
document.cookie
劫持cookie原理
<script src = "劫持js"></script>
恶意人员的页面,它引入一个js文件,里面有获取你浏览器的cookie的js代码,然后发送到他的服务器
history
history代表浏览器的历史记录
history.back() //返回前一个页面
history.forward() //前进