javascript入门(一)
<!--
前提:IDEA 需要设置ES6语法
'use strict'; 严格检查模式,预防javascript的随意性导致的一些问题
必须写再Javascript的第一行
局部变量建议都使用Let去定义
-->
<script>
'use strict';
let i = 1;
</script>
iterator
遍历数组
//通过for of 实现 for in 下标
<script>
'use strict';
var arr = [3,4,5];
for (var x of arr){
console.log(x)
}
</script>
遍历Map
<script>
var map = new Map([["tom",100],["jerry",200],["hasagei",300]])
for(var x of map){
console.log(x);
}
</script>
遍历Set
<script>
var set = new Set([5,6,7]);
for(let x of set){
console.log(x);
}
</script>ja
函数的定义和参数获取
定义函数
方式一:
绝对值函数
<script>
function abs(x){
if (x>=0){
return x;
}else{
return -x;
}
}
</script>
一旦执行到return代表函数结束,返回结果!
如果没有执行return,函数执行完也会返回结果,结果就是undefind
方式二:
<script>
var abs = function (x){
if (x>=0){
return x;
}else{
return -x;
}
}
</script>
function (x){...}这是一个匿名函数,但是可以把结果赋值给abs,通过abs可以调用
参数问题:javascript可以传任意个参数,也可以不传递参数
可以手动抛出异常来查看参数问题
<script>
var abs = function (x){
//手动抛出异常
if(typeof x!=='number'){
throw 'Not A Num'
}
if (x>=0){
return x;
}else{
return -x;
}
}
</script>
arguments是一个免费赠送的JS关键字
变量的作用域
在javascript中,var定义变量实际是有作用域
如果在函数体内声明,则在函数体外不可使用
<script>
function js(){
var x = 1;
const x = x + 1;
}
x = x + 2; //Uncaught SyntaxError: Identifier 'x' has
</script>
如果两个函数使用了相同的变量名,只要其在自己的函数内部,则彼此之间不冲突
<script>
function js(){
var x = 1;
const x = x + 1;
}
function jsk(){
var x = 1;
const x = x + 1;
}
</script>
内部函数可以访问外部函数的成员
<script>
function js(){
var x = 1;
function jsq(){
var y = x + 1;
}
var z = y + 1;
}
</script>
假设,内部函数变量和外部函数的变量重名
假设在javascript中函数查找变量从自身函数开始,函数变量的查找从内到外查找
<script>
function js(){
var x = 1;
function jsq(){
var x = 'A';
console.log('inner'+x);
}
console.log('outer'+x);
jsq()
}
js()
</script>
提升变量的作用域
<script>
function js(){
var x = "x" + y;
console.log(x);
var y = "y";
}
function jsq(){
var y;
var x = "x" + y;
console.log(x);
y = "y";
}
js()
</script>
结果:xundefined
结论:JS执行引擎,自动声明了y的声明,但是不会提升y的赋值
综上所述:写JS代码,声明变量全放在函数头部
全局变量
<script>
var x = 1;
function f(){
console.log(x);
}
console.log(x);
</script>
默认所有的全局变量,都会自动绑定在windows对象下
JS实际上只有一个全局作用域(window),任何变量(函数也可以视为变量),假设没有在函数的作用范围内找到,就会向外查找,如果在全局作用域都没有找到,会报错:RefrenceError
规范
由于我们所有的全局变量都会绑定到我们的window上,如果不同的JS文件,使用了相同的全局变量,
<script>
//唯一全局变量
var globalPath = {};
//定义全局变量
globalPath.name = "quanju";
globalPath.add = function(a,b){
return a + b;
};
</script>
把自己的代码全部放入自己定义的唯一空间名字中,降低全局命名冲突的问题.
局部作用域 let关键字
let 关键字,解决局部作用域冲突问题,建议使用
常量 const关键字
方法
定义方法
方法就是把函数放在对象里面,对象只有两个东西,属性和方法。
方法调用要加括号
<script>
var zs = {
name : 'zs',
birth : 2000,
age : function () {
// 今年 - 出生年
var now = new Date().getFullYear();
return now - this.birth;
}
}
//属性
zs.name;
//方法
zs.age();
</script>
this 始终指向调用他的人
apply
在JS中可以控制this指向object
<script>
function getAge() {
// 今年 - 出生年
var now = new Date().getFullYear();
return now - this.birth;
};
var zs = {
name : 'zs',
birth : 2000,
age : getAge
};
getAge.apply(zs,[]);//this指向了zs对象,参数为空
</script>
Date日期对象
<script>
var now = new Date();
now.getTime();//获取时间戳1609549447451
now.getDate();//日
console.log(new Date(1609549447451));//把时间戳转为东八区时间
</script>
JSON对象
对象都用{}
数组都用[]
所有的键值对都用 key:value
在JS当中一切都为对象,都可以转化为JSON,JSON也可以转换为对象
AJAX
- 原生的JS写法,xhr异步请求(基本上不用)
- Jquery封装好的方法
- axios请求
本次复习笔记资料来自B站UP主:狂神说