博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
运算符有感
阅读量:5273 次
发布时间:2019-06-14

本文共 2283 字,大约阅读时间需要 7 分钟。

在SegmentFault网上看问题的时候(这个网站是真的厉害,以前很多问题在上面看到答案就跑到这网站上来闲逛),看到别人发的一个知乎的链接,就点进去看,,发现这个问题我以前也不知道,挺有趣的。

摘取几个我觉得不错的回答句子:

1.这个时候 EMCAScript 解析器会认为 alert 是个「引用类型(Reference Type)」,那么它将会在当前作用域(默认为 window)去寻找这个引用类型引用的值,那么 windows.alert 自然是个函数。

同时,他留下了这个问题:

* [1,2,3][0||1,2]* [1,2,3][1,2||3]* ("hello","world")[1,2,3]

这个问题放到后面解决

 

2.不是括号的问题,是逗号运算符。

多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。
这是从C语言借鉴过来的属性。

看到他的回答,我就去搜索了一下逗号运算符,看到百度百科上举了这个例子:

int a1,a2,b=2,c=7,d=5;a1=(++b,c--,d+3);a2=++b,c--,d+3;

对于给a1赋值的代码,有三个表达式,用逗号分开,所以最终的值应该是最后一个表达式的值,也就是(d+3)的值,为8,所以a1的值为8。

对于给a2赋值的代码,也是有三个表达式,这时的三个表达式为a2=++b、c--、d+3,(这是因为运算符比逗号运算符优先级高)所以最终表达式的值虽然也为8,但a2=4(第2行代码运算完时,b=3,即第3行代码运行时,b的值为4)。

这里要注意的几点,首先,它虽然是只得到最后的表达式,但是这种++他还是会计算(自己得出的结论),其次,如果没有()括号运算符之后,他就直接得到第一个表达式了,这应该是运算符的优先级问题。

 

第三个人的回答:

这既不是什么“遗留问题”,也不是什么“故意”设置,是因为你对整个js的体系完全不了解,建议先放下来多看书,别急着提问,了解大局后就不会有这种问题了。

----
在(1,2,3)里,括号和逗号都是运算符,逗号运算符返回最后一个表达式的求值结果,具体规则可自己查。
("Amazing")的括号表示函数调用。
alert是一个函数对象,当它作为表达式的求值结果返回,当然可以被调用。
[1,2,3]这里的方括号是声明数组常量,紧跟[1]表示取数组元素。[1,2,3][1]意为取[1,2,3]这个数组里的第一个元素,即2(下标从0开始)
[1,2,3][1,2]=[1,2,3][(1,2)]=[1,2,3][2]=3;

 

汗!哎,看来我就是他说的那个对整个js的体系完全不了解的人了,不过他这个回答最近人意吧,直接解释,看了他的基本就明白啦。

最后总结:逗号整个表达式的值是最后一个表达式的值。但是遇到++的时候还是会计算,如果没有()括号运算符就会直接得到第一个表达式的值。那么问题来了,第一个回答下那个人的问题怎么解:

* [1,2,3][0||1,2]* [1,2,3][1,2||3]* ("hello","world")[1,2,3]

忧伤,又出来个新的||运算符,得,又不知道结果啦,百度下先。

 条件运算符具有右结合性

当一个表达式中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒号配对,并按这一原则正确区分各条件运算符的运算对象。

例如:w

但若在java语言里,JAVA中条件表达式的值必须参与运算。

publicclassdemo{    publicstaticvoidmain(String[]args){        inta=10,b=20,y;        a>b?(y=a):(y=b);//1,这样写是错误的        y=a>b?a:b;//2,这样写是正确的        y=a

以上程序中,1处错误是由于条件表达式的值没有参与运算,不能构成语句。3处(b<c?a:c)先结合,再将这个值参与到另一个条件运算中去,是合法的,这也说明了条件运算符的右结合性。    

运算符妙用

——用条件表达式判断输出单词的单复数。

程序示例:ChooseDemo05.java

程序中会自动根据apples的个数来输出单词的单数或复数。

publicclassChooseDemo05{    publicstaticvoidmain(String[]args){        intapples=1;//苹果的个数        System.out.println("Ihave"+apples+"apple"+(apples==1?".":"s."));    }}

1、 在某些地方使用“他”还是“她”。当然,还有其他的应用:

2、日期输出时决定使用后缀“st”、“nd”等。

 

然而看完这个词条我还是没得到||运算符的一些消息。

我又找了一会,还是没有找到答案,于是我就自己试,发现我暂时的结果是,||运算符一般会取前面这个数,如:1||5,会取得1,但是当前面这个数为0时,会取得后面这个数,当两个数都为0时,则会取得0,我还不知道为什么,但是暂时我试了几次都是这样。("hello","world")[1,2,3],这个当然后面会取得3,前面的话,我试了下,他会取第后面这个数,即world,那么3就是获得这个词第三个字母,即l。这些是我实验的发现。

转载于:https://www.cnblogs.com/wangxi01/p/8075592.html

你可能感兴趣的文章
2019春 软件工程实践 助教总结
查看>>
Zerver是一个C#开发的Nginx+PHP+Mysql+memcached+redis绿色集成开发环境
查看>>
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
价值观
查看>>
mongodb命令----批量更改文档字段名
查看>>
国外常见互联网盈利创新模式
查看>>
android:scaleType属性
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
Linux中防火墙centos
查看>>
如何设置映射网络驱动器的具体步骤和方法
查看>>
centos下同时启动多个tomcat
查看>>
Leetcode Balanced Binary Tree
查看>>
[JS]递归对象或数组
查看>>
linux sed命令
查看>>
湖南多校对抗赛(2015.03.28) H SG Value
查看>>
hdu1255扫描线计算覆盖两次面积
查看>>