js补充 null与undefined区别 类型转换 == 代码块 逻辑运算符

null与undefined区别

从设计之初考虑

undefined:当一个变量声明未赋值,打印结果是undefined

null: 当你想声明一个对象却不确定时,可以var obj = null

//声明变量对象时{}与null区别
var obj1 = {}
var obj2 = null
if(obj1){
//这里代码会被执行
}

if(obj2){
//这里代码不会被执行
}

类型转换

string

隐式转换:+只要有一个是字符串类型,+就是拼接

显示转换:String()

number

隐式转换:*/

显示转换:Number()

boolean

隐式转换:直观上为空的都会转为false,0/""/null/undefined/nan,其他转为true

显示转换:Boolean()

==与===区别

==进行判断时,当两个运算元数据类型不同时,会把运算元转为number类型,再进行判断,null或者对象类型除外

情况一:null==undefined true

情况二:NaN == NaN false

情况三: Number类型 == String类型 String类型ToNumber()

情况四: Boolean类型也会ToNumber()

情况五:Number || String == Object  || null    会把复杂类型转为原始类型进行   ToPrimitive(obj/null)

// 这里null虽然经过了ToPrimitive(),但是被函数直接返回,没有转化,所以false
console.log(123 == null) // false

//obj对象进行==判断时,会调用ToPrimitive()转原始对象,具体函数内部怎么实现,我们不深究,但我们可以重写
var obj = {
    name : "zhao",
    [Symbol.toprimitive](){
        return 123
    }
}

console.log(123 == obj) // true

===严格比较不会进行类型转换

代码块

在js中可以用花括号表示代码块,比如:if判断for循环...我们可以通过分支语句与循环控制代码块执行

{
    var name = "zhao"
    var age = 18
}

注意:对象不是代码块,

逻辑运算符

逻辑或  a || b   只要一个为true,就是true

本质:短路或  res = a || b || c  abc均为运算元 从左开始,转为Boolean类型,找到true就把原数据返回,不会继续向下判断,如果所有运算元都是false就把最后一项运算元原数据返回

function getMessageLength(message) {
    var mes = message || "默认值"   // 开发中最常用
    return mes.length
}

逻辑与 a && b 只要有一个false就是false

本质: 短路与 res = a && b && c 从左开始,转为Boolean类型,找到false就把改运算元原数据返回,不会继续向下执行,如果全是true,就把最后一个运算元元数据返回

var obj = {
    name : "zhao",
    friend : {
        name: "li",
        eating: function() {
            console.log("eating")
        }
    }
}

obj && obj.friend && obj.friend.eating && obj.friend.eating() // 这样更安全

逻辑非 !

转为Boolean类型   var  message = "hello world"  !!message

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值