隐式转换
当字符串型遇到 减号,乘号,除号 时,字符串型会转换为数字型,例如:var age = '12' - 12,age 的结果为0。不要直接判断两个浮点数是否相等(因为浮点数有误差)
逻辑与中断
语法:表达式1 && 表达式2
如果 表达式1 为真,则返回 表达式2
如果 表达式1 为假,则返回 表达式1
逻辑或中断
语法:表达式1 || 表达式2
如果 表达式1 为真,则返回 表达式1
如果 表达式1 为假,则返回 表达式2
逻辑与的优先级比逻辑或的优先级高
arguments 的使用
使用场景:①只能在函数内部使用 ②当不确定要传递多少个参数的时候,可以用 arguments 获取
说明:①arguments 实际上它是当前函数的一个内置对象 ②所有函数都内置了一个 arguments 对象 ③arguments 对象中存储了传递的所有实参,并且是以伪数组的形式存储
伪数组:①可以遍历 ②具有 length 属性 ③按索引方式存储数据,可以通过下标获取数据 ④不具有数组的 push(),pop() 等方法
全局作用域
整个 script 标签或者是一个单独的 js 文件
局部作用域(也称函数作用域)
只能在函数内部起效果
全局变量
①特殊情况:不使用 var 声明的变量也是全局变量(不建议用)
②在任何一个地方都可以使用,只有在浏览器关闭时才会释放空间,因此比较占内存
局部变量
①函数的形参实际上是局部变量
②只在函数内部使用,当代码块运行结束后,就会释放空间,因此节省内存
JS 引擎运行 js
1、js 引擎运行 js 分为两步:①预解析 ②代码执行
⑴预解析:js 引擎会把 js 里面所有的 var 和 function 提升到当前作用域的最前面
⑵代码执行:从上往下执行
2、预解析
预解析分为变量预解析(变量提升) 和 函数预解析(函数提升)
⑴变量提升:就是把所有的变量声明提升到当前作用域的最前面,但是不提升赋值
⑵函数提升:就是把所有的函数声明提升到当前作用域的最前面,但是不调用函数
对象
1、利用对象字面量创建对象 { }
①里面的属性或方法采取键值对的形式创建,如:属性名(键) :属性值(值)
②多个属性和方法中间用逗号隔开
③方法冒号后面跟的是一个匿名函数
2、对象的使用
①调用对象的属性,对象名.属性名
②调用属性的另外一种方法,对象名['属性名']
③调用对象的方法,对象名.方法名( )
3、构造函数创建对象
说明:如果用之前的方法创建对象,那么会出现许多相同的属性和方法,为了防止冗余,就要使用构造函数创建对象。构造函数就是把对象里面相同的属性和方法抽象出来封装到函数里面
构造函数的语法格式
function 构造函数名() {
this.属性 = 值;
this.方法 = function() {};
}
new 构造函数名();
注意:
①构造函数名字首字母要大写
②构造函数不需要 return,它可以直接返回结果
③调用构造函数必须使用 new
④调用一次构造函数就会创建一个对象
⑤属性和方法前面必须添加 this
new 在执行时会做四件事情
①程序在读到 new 时,会在内存中创建一个空对象
②this 会指向刚才创建的空对象
③实参传递给形参,赋值。赋值完毕后把属性和方法丢给空对象
④返回这个空对象(所以构造函数里面不需要 return)
Date 日期函数
getDay():获取当前星期(0~6,0代表星期天)。因为中国人看星期的习惯是文字型的而不是数字型的,所以一般是用数组把星期存起来,如 var arr = ['星期天','星期一','星期二','星期三','星期四','星期五','星期六']; 因为0代表星期天,所以数组的0索引必须对应星期天,0~6正好可以表示数组索引。
获得 Date 总的毫秒数:首先,是从1970年1月1日开始算起到当前时间的总毫秒数,方法有:valueOf(), getTime(), +new Date(), Date.now()。其中,开发中常用的是 +new Date(), Date.now(),+new Date() 和 Date.now() 不需要实例化 Date() 对象,可以直接打印。这些方法如果没有参数,返回的是当前时间的总毫秒数;如果有参数,返回的是参数对应的总毫秒数。
总毫秒数转换为几天几时几分几秒(时间戳转换为时分秒)算法
d = parseInt(总秒数/60/60/24); //天
h = parseInt(总秒数/60/60%24); //时
m = parseInt(总秒数/60%60); //分
s = parseInt(总秒数%60); //秒
取个位、十位、百位等位数算法
var the_unit = i % 10; //取个位
var the_ten = (i / 10) % 10; //取十位
var the_hundred = (i / 100) % 10; //取百位
结论:个位直接 % 10,十位先除以 10 再 % 10,百位先除以 100 再 % 10,以此类推
检测数组的方法
1、instanceof
①它是个运算符,语法格式为:数组名 instanceof Array
②如果判断的对象是数组,则它的结果为 true
③如果判断的对象不是数组,则它的结果为 false
2、Array.isArray(参数)
①它是数组内置方法,语法格式为:Array.isArray( ),括号里面是个值,这个值随意,可以是变量、字符串等
②如果判断的值是数组,则它返回的结果为 true
③如果判断的值不是数组,则它返回的结果为 false
数组 sort() 方法说明
sort 的完整写法:
sort(function(a,b) {
return a-b; //升序
return b-a; //降序
})
获取数组元素索引的方法
1、indexOf()
①括号里面放的是要查找的元素
②它是