鍍金池/ 問答/HTML/ 再看antd源碼的時候,有一點疑惑

再看antd源碼的時候,有一點疑惑



export interface IconProps {
  type: string;
  className?: string;
  title?: string;
  onClick?: React.MouseEventHandler<any>;
  spin?: boolean;
  style?: React.CSSProperties;
}

const Icon = (props: IconProps) => {
  const {type, className = '', spin} = props;

  const classString = classNames({
    anticon: true,
    'anticon-spin': !!spin || type === 'loading',
    [`anticon-${type}`]: true,
  }, className);
  return <i {...omit(props, ['type', 'spin'])} className={classString}/>;
};

export default Icon;
這是里面最簡單的Icon的組件源碼,在看到!!spin 這里。不理解為什么要用!!spin 這樣來寫。一開始認為是如果spin沒有傳入的話,那么這個值就是undefined,所以需要用!undefined 來轉(zhuǎn)為boolean類型,但是后來自己測試了下 undefined 默認是false的,好像并沒有影響結(jié)果。希望哪位可以解惑下。
因為在其他組件里面好多都是這樣寫的額
回答
編輯回答
愛礙唉

!!意思就是把后面的變量轉(zhuǎn)換為bool類型,再判斷是否為真

2018年4月7日 19:13
編輯回答
互擼娃

!!用來把一個值強制轉(zhuǎn)換成boolean類型的值,antd的tsconfig里面設(shè)置了strictNullChecks,boolean類型不能賦值為null和undefined,需要強轉(zhuǎn)

2018年7月7日 14:54
編輯回答
青黛色

clipboard.png

!是取反, !! 是強制轉(zhuǎn)換為布爾值
2018年9月14日 03:52
編輯回答
墨染殤

JavaScript是一門弱類型的語言,但是,在使用中有時需要強制轉(zhuǎn)化為相應(yīng)的類型。所以,!!() ,這種寫法有將弱類型轉(zhuǎn)化為強類型的作用

2017年2月16日 23:17
編輯回答
悶騷型

只是因為anticon-spin期望值是bool,否則隱式類型轉(zhuǎn)換也沒什么問題。

var a = 'a'||true; //'a'
2017年4月24日 20:41
編輯回答
柚稚

就是不管什么值都強制轉(zhuǎn)換為 boolean 類型,不然代碼邏輯要寫反

2017年9月1日 01:50