美文网首页
字符串和字符串对象

字符串和字符串对象

作者: skoll | 来源:发表于2022-06-19 15:31 被阅读0次

    字符串

    1 .字符串属于不可变对象,每一次修改都会返回一个新的字符串
    2 .不能改变他的状态,他的属性值,也不能向他添加新的属性

    const str = "abc";
    str.myNewProperty = "some value";
    alert(str.myNewProperty);
    //这样是加不上去的,会弹undefined
    

    字符串对象

    1 .但是字符串对象不r是r

    const str = new String("abc");
    str.myNewProperty = "some value";
    
    alert(str.myNewProperty);
    
    str.myNewProperty = "a new value";
    
    alert(str.myNewProperty);
    

    2 .他是一个对象,而且没有被冻结.

    引用相等VS值相等

    1 .示例1

    let str1='abc'
    let str2=str1
    let str3='abc'
    
    str1===str2,str1===str3,str2===str3
    //无论从引用还是值的方式,他们都是相等的
    

    2 .示例2

    var str1=new String('abc')
    let str2=str1
    let str3=new String('abc)
    str1===str2:true
    str1===str3,false
    str2===str3,false
    //在每种情况下,都会创建两个不同的对象,因此他们的引用不相等
    
    image.png

    3 .也就是说想要比较两个对象是否相等,我们需要比较值相等,而不是引用相等 str1.valueOf()===str2.valueOf()

    React和这个的关系

    1 .react利用对象的不可变性来做性能优化
    2 .如果组件的属性和状态是不可变的对象或值,您可以使用简单的相等运算符检查它们是否发生了变化.如果我们把对象深度嵌套这种都变为简单类型,那不就可以只需要简单的等号就可以判断是否发生了变化

    1 .最简单的就是使用不可变都对象
    2 .如果对象需要更新,则必须创建一个具有新值的新对象,因为原始对象不可更改,无法修改
    3 .这样我们只需要判断引用就能知道数据是否发生了修改
    

    3 .但是一些深度嵌套的单项做了修改,如何优雅的感知到

    myPackage.sender.address.country.id = 1;
    

    4 .实际上来说,对于一些数组元素,只能遍历所有的数组然后进行比较,但是数组元素应该不会被传下去吧.我们要把这些数据放到redux,不然他在props这里传,其实还有一个问题

    console.log('click')
            // setArr(update(arr,{1:{$set:2}}))
            // 本质上没变,我看他有没有做优化,chrome工具没有看到变化,也就是这里的引用其实应该没有变化
    
            setArr(update(arr,{1:{$set:20}}))
            // 这样变了的话,真的被感知到了
    

    props传一些不用的数据进来,这些数据变化,会不会导致子元素触发渲染

    相关文章

      网友评论

          本文标题:字符串和字符串对象

          本文链接:https://www.haomeiwen.com/subject/rddmvltx.html