7.18js基础补充

隐式类型转换

(加法运算)
任何内容和字符串链接—字符串
除了字符串,数字和其他相加----优先数字
数值和引用类型相加时,引用类型自动转换字符串

(减法运算)
引用类型转换数值时—转数值NaN
数组特殊,优先转换字符串,然后转换数值

obj → [object Object]
​ undefined → undefined

​ null → null

​ NaN → NaN

​ num → str

运算符

赋值时返回赋值结果
运算(不能超过2的31次幂)

(&&)当前面ture时返回后面结果,当前面false时返回前面结果。

(3&4)位于运算,结果为0(011&100=0)
(123123&0xFF)//不大于255的任何数值

(3|4)位或运算,结果为7(011|100=111)
(|0XFF)//不小于255

(3^ 4)异或运(0^0 = 0 0 ^ 1=1)结果为7(011异或100 =111=7)
异或可以加密

~ 位非运算 +1取负
用于取整(不处理小数,不能超过2的31次幂)

    对于小数 向下取整 (比Math.floor好用)
    特别的
        ~数组时,数组中 若只有单项元素且类型为数字或类数字(字符串内要为纯数字) 
            (即[1]或['1']) 时,arr转数字 然后+1取反
        ~其它的任何类型(当然除了str '1') 
            ~非数字 == -1 ()  包括null、undefined、NaN等
        由上易得 ~~'a' = = 0

(1<<n)<<左移位 2的n次幂
(218>>1) >>右移位
低于加减运算

例(a+= 1? 1 : 2)=1 (三目运算优先+=运算)

布尔转换

所有引用类型转换成布尔类型转换成 true

===
​ undefined = = = undefined、null= ==null

​ 但NaN!==NaN
​ 判断一个值是否是NaN,只能用isNaN()来或者Objec.is()来比较
​ Object.is(Number(‘a’),NaN) nan是nan 所以返回true
引用类型 地址相同 则相同

==
如果两个值类型不同,他们也可能相等。根据下面规则进行类型转换再比较

 // ""==fasle==0

如果两个值类型不同,他们也可能相等。根据下面规则进行类型转换再比较
​ undefined= =null 其它的4个空不可以
​ str==num 则str先变成num
​ true变1 false变0
​ 如果一个是对象,另一个基本类型,把对象转换成基础类型的值再比较。
​ 对象转换成基础类型,利用它的toString或者valueOf方法。
​ js核心内置类,会尝试valueOf先于toString;例外的是Date,Date利用的是toString转换。

object.is()//精确比较(可以比较NaN)

isNaN()自动隐式转换成数值类型,并且判断是不是nan
number.isNaN()不转换
number.isintegar()判断是否为整数

条件语句

if()
//表达式运算后隐式转换为布尔类型(优先转换)后判断是否为true,如果是true进入循环
undefined null “” false 0 nan
var o={ }
if(o){}表示不是 以上六种情况

var a=0 /或其它值
​    var b
​    if(a++){ b=3 }
​    这等价于
​    if(a===0){ a++;b=3 } else {a++}

循环语句

循环while()中“ , ”前不作为循环条件判断,只判断最后一个表达式是否为true
利用死循环解决问题,break
深度遍历,所使用的深度遍历的属性必须固定(适合链表linked)
可以使用break continue 完成跳转到外层label中

​    让s=1加到100  *//5050*var i=0,s=0;while(s+=i,++i<=100);// while(true)  判断在里 循环在外  (借助break)var arr=[1,2,3,4]while(true){if(!arr.length) break
​        arr.pop();}

对象

键值对 key value
一个键对应一个值
键必须是字符型或者symbol型,如果不是则隐式转换为字符串
键不能重复,重复就是覆盖

创建对象key
// s=a-1
// var obj={
// a
// [s]
// “a-1”
// }
任何对象转换成字符串时都会变成[ object object]

for in 使用for in自动转换成字符串,并且可以打印除所有外的其他属性
//不可遍历不可枚举属性

判断一个东西是不是数组
​ if(!array || array.constructor!==Array) throw new Error(array+“不是一个数组!”)

对象中属性的this指向当前对象外上下文环境中的this

var o={a:1,b:2}
o=null,清除引用类型
null用来在垃圾回收时,可以将不使用的引用类型回收掉

JSON.stringfy()对象转换字符串

函数

纯函数 独立个体,不会对函数外的变量和其他内容有影响(开发时应该尽量向纯函数靠拢,少跟外面联系)
局部变量,函数执行后会自动释放

同步

function fn(){
fn1
}
function fn1(){
fn2
}
function fn2(){
fn3
}用于异步处理
异步

var ef =new function(“”,“”,)字符串
//用于动态改变
// 用途是需要传字符串来写函数的时候

 var a=1{
​      a=2;
​      fn a(){}
​      a=3;
​      fn a(){}
​      a=4
​      console.log(a)  *//4*}
​    console.log(a)  *//3*
​    再看一个
​    var a=1{
​      a=2;
​      fn a(){}
​      a=3;
​      a=4}
​    console.log(a)  *//2*

同名函数在块内预解析预赋值的同时将,同名函数上的同名变量挤出快外赋值。

回调循环

setTimeout(fn,1000) 这是有返回值的 调用几次返回几 , 第二个参数不设置就会每帧走一遍

解耦
cleartimeout()防止内存泄漏

arguments.callee 指向当前函数
argmment.callee.caller执行该函数的上下文 执行环境函数

递归函数
尾递归(执行更快)后面没有语句
​ 尾递归:函数体内 递归放在最后 性能好
​ 非尾递归 一层一层返回时 后面还有代码 就麻烦
​ 而尾递归 直接从最后一层调到最外层 √

作业.对象深比较

var len=object.keys(o)获取所有key
var values=object.values(o)获取所有key对应数组数值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值