Please enable JavaScript.
Coggle requires JavaScript to display documents.
JavaScript延伸 - Coggle Diagram
JavaScript延伸
作用域
概念
一段代码中所用到的所有名字不一定总是有效的,限定这个名字的可用性的代码范围就是这个名字的作用域
分类
全局作用域
整个script标签或者一个单独的js文件,或者写在script标签中的变量
局部作用域
写在函数里面的变量,只在函数内部起效
变量的作用域
根据作用域的不同,变量分为全局变量和局部变量;
分类
全局变量:在全局作用域下的变量,可以任意地方使用
(如果在函数内部没有声明直接赋值,当做全局变量)
局部变量:在函数内部声明的变量,只能在函数内部使用
执行效率
全局变量:只有在浏览器关闭后才会销毁,比较占内存
局部变量:程序执行完毕就会销毁,比较节约内存
作用:减少命名冲突
作用域链
内部函数访问外部函数的变量,采取的是链式查找的方法来决定取哪个值,这种结构我们称为作用域链
根据就近原则来查找
内置对象
自定义对象
自己定义的new对象
Date对象
常用方法
获取总的毫秒数(时间戳)
倒计时效果
转换公式
s=parselnt(总秒数%60):秒数
m=parselnt(总秒数/60%60):分数
h=parselnt(总秒数/60/60%24):小时
d=parselnt(总秒数/60/60/24):天数
核心算法:利用时间戳把用户输入的时间减去现在的时间就是剩余时间,再转换为时分秒
现在时间距离19701.1的总的毫秒数
方法
H5新增:console.log( Date .now() )
var 变量名=+new Date 也是返回总的毫秒数
getTime()
valueOf()
getMinutes:返回分钟
getHours():返回时钟
getSeconds:返回秒钟
getDay:返回星期,周日返回0,周一返回1
getDate:获取当天日期
getMonth():获取当月(0-11),可在代码后面写上+1
getFullYear:获取当年
参数的常用写法
‘2022-01-11’(常用)
2022,1,11
如果没有跟参数,返回当前系统的当前时间
是一个构造函数,必须使用new来调用
内置对象
Math对象
Math.random():返回一个【0,1)范围内的小数
Math.round:四舍五入
Math.abs():绝对值
Math.ceil():向上取整
Math.max() / Math. min() :最大值/最小值
Math.floor():向下取整
Math.max(2,99)返回99
例如:Math.Pi
不是一个构造函数,所以不需要new来调用,直接使用里面的属性和方法
js语言自带的一些对象,帮助我们快速开发
字符串对象
基本包装类型
基本包装类型就是把简单包装类型转化为复杂数据类型,这样他们就
有了属性和方法
定义:为了方便操作基本数据类型,js提供了三个特殊引用类型:string,number和Boolean
字符串的不可变性
重新赋值对字符串赋值并不会改变它原有的值,只是另外开辟一个空间来存放新值,所以重新赋值字符串会浪费空间
所以要尽量避免拼接字符串
根据字符返回位置
字符串变量名.indexOf(’要查找的字符‘,起始索引号);
字符串变量名.lastindexOf(’要查找的字符‘,从后开始查找的索引号);
根据位置返回字符
数组名.charAt(索引号)
:返回指定位置的字符
数组名.charCodeAt(索引号)
:返回指定位置字符的ASCII码,判断用户按下了哪个键
数组名.str[ 索引号 ]:返回指定位置字符
截取字符串
substr
Link Title
slice
Link Title
substring
Link Title
字符转换为数组
变量名.split( '分隔符')
数组名.join(’分隔符‘)
(将数组转换为字符串)
替换字符串
变量名.replace( '被替换的字符',' 替换为的字符')只替换第一个
转换大小写
toUpperCase():转换大写
toLowerCase():转换小写
使用console.dir()可以打印返回的元素对象,更好地查看里面的属性和方法
简单数据类型和复杂数据类型
定义
简单数据类型(基本数据类型、值类型
变量中存储的是值本身,如
string,number,Boolean,undefined,null
复杂数据类型(引用类型
变量中存储的是地址(引用)如
通过new关键字创造的对象
,Object,Array,Date等
堆和栈
栈(操作系统)
由操作系统自动分配释放存放函数的参数值、局部变量的值,
存放简单数据类型
堆(操作系统)
存储复杂类型(对象),一般由程序员分配释放,如程序员不释放,由垃圾回收机制回收,
存放复杂数据类型
数据类型内存分配
简单数据类型
首先
存放在栈里面,直接开辟一个空间来存放值
复杂数据类型
首先在
栈里面存放地址
,用十六进制来表示,然后这个地址指向
堆里面的数据
简单数据类型传参
值传递,不改变外部变量
复杂数据类型传参
js对象
概念
是一组无序的相关
属性
和
方法
组成的集合,所有的事物都是对象
属性:事物的特征(常用名词,如:大小,尺寸)
方法:属性的行为(常用动词,如:打电话,发短信)
如果你的对象有非字符串属性的话,JavaScript 会自动将它们转为字符串
创建对象的方式
new Object
创建对象
var obj= new Object();创建了一个空的对象
对属性赋值:obj.name='张三丰';
追加方法:obj.syHi=function(){}
使用等号=来赋值的方法来添加对象的属性和方法
每个属性和方法之间用分号;来结束
调用对象
如:console.log( obj . uname);
obj.sayHi();
构造函数
作用
利用构造函数,重复使用对象中相同的代码,使代码更加简略
定义
把对象里面的一些相同的属性和方法抽象出来封装到函数里面
声明
this.属性=值;
this.方法=function(){}
function 构造函数名
首字母大写
(形参){
}
var 变量=new 构造函数名(实参
一一对应
);
如:var ldh=new Star(’刘德华‘,’男‘,’45岁‘);
调用
变量名.属性/方法
构造函数中不需要return就可以返回结果
如:ldh.name
只要使用new 构造函数名()调用函数就创建了一个对象
构造函数和对象的区别
构造函数抽象了对象的公共部分,封装到了函数里面,泛指一大类
通过构造函数创造对象的过程也称为对象实例化
对象就是一组无序的相关属性和方法的集合
new关键字
2.让this指向这个空对象
3.执行构造函数里面的代码,给这个新对象添加属性和方法
1.在内存中创建一个新的空对象
4.返回这个新对象(所以构造函数中不需要return 就可以返回结果
this 指向函数的调用者
字面量
声明对象
里面的属性或方法采用键值对的方式,键 属性名:值 属性值
多个属性之间用逗号隔开
方法名:匿名函数
使用{}大括号将对象括起来
例如:var obj = { uname:xxx,age:xxx,sayHi:function(){}}
使用对象属性
属性调用
例如:console.log( obj.uname);
对象名.属性名
对象名【'属性名'】:在属性名中含有空格时必须使用
如:console.log( obj['age' ] ;
方法调用
对象.方法名()
总结
属性:对象里面的变量称为属性,
不需要声明,用来描述对象的特征
函数:单独存在,
使用函数名()的方式调用
变量:单独声明并赋值,
单独存在
方法:对象里面的函数称为方法,
不需要声明,使用对象.方法名()调用
遍历对象的方法
使用for in 函数
语法结构:for (变量in 对象){}
例如:for(var k in obj ){
console.log( k ) ;k或key:变量输出,得到属性名
console.log( obj [ k ]) ;得到属性值
预解析
js代码的解析器在运行时分为两步:预解析和代码执行
预解析:js引擎会把代码里面所有的var和function提升到作用域的最前面
代码执行:按照代码书写的顺序从上往下执行
分类
变量预解析
把所有的变量声明提升到当前作用域的最前面,不提升赋值操作
函数预解析
函数表达式,一般写在函数声明的后面
把所有的函数声明提升到函数的前面 不调用函数