一些细节性的东西总结 和不断补充;

1,  关于 if()的判断条件;

我们知道 使用if 的条件 ;期望得到一个布尔值;

我们也经常在会遇到这种场景, 使用一个对象的某条属性作为判断条件;

比如

 

const test={isl:""};
if(test.isl){  //dosth };

这里会做一个 隐式转化;

几种为flase的情况:

1,等一个对象为空“”;通过隐式转化为false;

2,未定义一个属性;  值就是 undefined ; 通过隐式转化为false;

3 ,预设属性等于null,值就是null ; 通过隐式转化为false;

4,值为0;值为0,通过隐式转化为false;

然后的话 ,这就有问题了;

如果  这个属性的的值为期待正常的值0;那么这种情况就会有bug了;

有人说这样

 

if(!!test.isl){//dosth};

双向转化一下;强制转布尔值;我试了一下,以上四种情况 全部为false,那就说明没有解决问题;

 

高程上的方案;用期待的类型去做比较;typeof 之类的 比较;

麻烦是麻烦了点 ,在某些 场景会需要这样做的;

除非在编程的过程中把这四种情况统一是为异常情况,否则就是会有这个比较隐蔽bug的风险,需要要严谨一些。

 

2,      关于bind的入参接受参数

直接上react代码了;

 

<InputItem onChange={v=>this.handlerChange.bind(this,"user",v)()}>user</InputItem>
handlerChange(k,v){
    this.setState({[k]:v})
}

这里是正常的bind传参; bind 从第二个参数起才是要传的参数, 

如果 没有传递参数 ,单纯是入参this呢?

那么将会接受到一个proxy对象

 

  1. Proxy {dispatchConfig: {…}, _targetInst: FiberNode, isDefaultPrevented: ƒ, isPropagationStopped: ƒ, _dispatchListeners: ƒ, …}
    1. [[Handler]]:Object
    2. [[Target]]:Class
    3. [[IsRevoked]]:false

这个应该是 bind 自己内部的闭包来实现的代理把, 猜测 ; 有不妥指出还望指正

 

  3, react  props传输 值类型的限制

注意: 从 React v15.5 开始 ,React.PropTypes 助手函数已被弃用,我们建议使用 prop-types 库 来定义contextTypes

我们提供 一个 codemod 脚本来自动转换。

import PropTypes from 'prop-types';

class Greeting extends React.Component {
  render() {
    return (
      <h1>Hello, {this.props.name}</h1>
    );
  }
}

Greeting.propTypes = {
  name: PropTypes.string
};

     引入,定义 就完事了 这样就可以为传入的props 来 限制类型了

4,    obj的对象属性是为定义导致的 Uncaught TypeError

声明一个对象 var obj={};

       obj.a //undefined

       obj.a.a 会直接报错 Uncaught TypeError;

  这样写可以规避 报错 obj.a&&obj.a.a  //undefined

 

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值