JS 里的范例

JS 里的范例

number范例转

`string`:`toString`、String()全局函数、加上空字符串
`boolean:Boolean()全局函数、一个`!`取反,两个`!`取反在取反

string 范例转

`number`:Number()全局函数、parseInt()、parseFloat()、`+`、`-0`
`boolean`:Boolean()全局函数、一个`!`取反,两个`!`取反在取反

boolean范例转

`number`:Number()全局函数、`+`、`-0`
`string`:`toString`、String()全局函数、加上空字符串

null范例转

`number`:Number()全局函数、`+`、`-0`
`string`:String()全局函数、加上空字符串
`boolean:Boolean()全局函数、一个`!`取反,两个`!`取反在取反

undefined范例转

`string`:String()全局函数、加上空字符串
`boolean:Boolean()全局函数、一个`!`取反,两个`!`取反在取反

object范例转

`string`:`toSting`、String()全局函数、加上空字符串
`boolean:Boolean()全局函数、一个`!`取反,两个`!`取反在取反
`null`:
`number`

falsy值:0NaN''nullundefinedfalse
console.log()应用toString()要领
console.log((1).toString)

内存

简朴范例的数据存储在栈内存中
庞杂范例的数据存储在堆内存中,栈内存中存储堆内存中的

浅拷贝和深拷贝

浅拷贝:只拷贝堆内存中的地点,假如我们从新赋值,原值会转变;简朴范例拷贝都是深拷贝;
深拷贝:把栈内存中的内容从新拷贝了一份,堆内存中存储的地点也将变化;假如 b 拷贝 a,转变 b,a 稳定是深拷贝;转变 b,a 也随着变是浅拷贝。

var a = {n:1}
var b = a
a.x = a = {n:2}        //a.x 中 a 是肯定的,是{n:1}的援用;背面 a = {n:2},a 变成{n:2}的援用,但 a.x 中的 a 是肯定的,所以在{n:1}中又加上了{x:{n:2}}
console.log(a.x)    //undefined
console.log(b.x)    //{n:2}

深拷贝要领:
要领一:

var obj = {
    age:10,
    friend:{
        name:'xiaoming',
        age:12,
        hobby:{
            sport:'football',
            foot:'apple'
        }
    }
}
function copy(object){
    var newObj = {}
    for(var key in object){
        if(typeof object[key] === 'string' || typeof object[key] === 'number' || typeof object[key] === 'boolean' || object[key] === undefined || object[key] === null){
            newObj[key] = obj[key]
        }else{
            newObj[key] = copy(key)
        }
    }
    return newObj
}

var obj2 = copy(obj)

假如如许写,对象中的简朴范例是深拷贝,而庞杂范例是简朴拷贝

var obj = {
    age:10,
    friend:{
        name:'xiaoming',
        age:12,
        hobby:{
            sport:'football',
            foot:'apple'
        }
    }
}
function copy(object){
    var newObj = {}
    for(var key in object){
        newObj[key] = obj[key]
    }
    return newObj
}
var obj2 = copy(obj)

要领二:

var obj = {
    age:10,
    friend:{
        name:'xiaoming',
        age:12,
        hobby:{
            sport:'football',
            foot:'apple'
        }
    }
}
var obj2 = JSON.parse(JSON.stringify(obj))

轮回援用

var a = {}
a.self = a

渣滓接纳

假如一个对象没有被援用,它就是渣滓,将被援用

var fn = function(){}    //fn 被赋值 null 后,这个函数不是渣滓
document.body.onclick = fn
fn = null
    原文作者:UCCs
    原文地址: https://segmentfault.com/a/1190000015889759
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞