将值更改为其他值,然后将“!”算子

时间:2018-09-10 13:40:08

标签: javascript react-native

所以按照我的逻辑:

如果我碰到Email的不透明性,那么globlas.Email应该从false更改为true,但实际上它什么都不做

因为我认为'this.getMedia(item.MediaNow)'= true 然后至少是:'!(!this.getMedia(item.MediaNow))'=假

有人可以解释一下为什么吗? 或告诉我如何使我的代码按预期工作。

getMedia = Media => {
 switch (Media) {
   case "Call":
    return global.Call;
  case "Email":
    return global.Email;


setMedia = (Media, value) => {
 switch (Media) {
  case "Call":
    global.Call = value;
    this.setState({});

  case "Email":
    global.Email= value;
    this.setState({});


 {...}


 <TouchableOpacity
  onPress={() => {
   this.setMedia(!this.getMedia(item.MediaNow)); 
// MediaNow is either "Call" or "Email". so my expectet result of 
// (!this.getMedia(item.MediaNow)) would be: true/false

  }}
 >

global.js:

export default {
 Call: false,
 Email: false,
};

非常感谢

2 个答案:

答案 0 :(得分:2)

查看您的方法:

setMedia = (Media, value) => {

现在看看你怎么称呼它

this.setMedia(!this.getMedia(item.MediaNow)); 

方法需要两个参数,而您要传递一个。

this.setMedia(item.MediaNow, !this.getMedia(item.MediaNow)); 

答案 1 :(得分:1)

据我所见,您将返回在全局对象内部定义的值。

使用!运算符,JavaScript会尝试将该值转换为布尔值,然后将其取反。

在您的情况下 (format t "~A~%" (read-line stream))

将被解析为...给我!this.getMedia(item.MediaNow)的值并将其转换为bool。

JS将检查该值是否为falsy(未定义,零,false等)或true(对象,非空字符串等)。

就您而言... !this.getMedia(item.MediaNow)