js对象属性赋值时,可以用三元表达式为什么不能用if(){}else{}

JavaScript017

js对象属性赋值时,可以用三元表达式为什么不能用if(){}else{},第1张

for (var i = 0 i < nodes1.length i++) {

    if (nodes1[i].nodeName == "P" && nodes1[i].nodeType == 1) {

        if(i%2==0){

            nodes1[i].style.backgroundColor = "yellow"

        }else{

            nodes1[i].style.backgroundColor = "red"

        }

    }

}

if(){}else{} 是语句,是没有返回值的,而三元表达式则是表达式,是可以直接赋值的。所以你不能想当然就这么用。

如果你真想获得类似三元表达式的效果,可以这样:

for (var i = 0 i < nodes1.length i++) {

    if (nodes1[i].nodeName == "P" && nodes1[i].nodeType == 1) {

        nodes1[i].style.backgroundColor = function(){

            if(i%2==0){   //把if语句放入一个匿名函数中

                return "yellow"

            }else{

                return "red"

            }

        }()  //立即执行这个匿名函数

    }

}

这个是一个三元运算表达式。 a? b:c。 a计算的结果为真的时候,返回的结果是b的值,否则是c的值。

(1)(document.getElementById)?true:false

就是判断document里面有没有getElementById这个成员,我们知道getElementById显然是document的一个函数,因为这是真的,所以这个表达式的返回值为b的值,也就是true;

(2)(document.all)?true:false

同理,document.all是页面内所有元素的一个集合。例如:document.all(0)表示页面内第一个元素。但是,这是一个奇怪的方法,它起源于IE 4不过在其他的浏览器或多或少的兼容,比如刚刚我用google浏览器测试了一下,这个表达式的返回值为false,也就是说,谷歌浏览器并不支持该方法。同时,我也查到了这个方法可以用来判断浏览器是否为IE浏览器,但是其可靠性并没有验证。

所以,可以粗略的得出一个答案:如果是IE浏览器的话,这句表达式返回的结果是true;否则,为false,也因为可以使用该表达式判断当前的环境是否是IE浏览器。

1、两者的核心功能不一样:

php中的核心功能是用函数方式实现,例如取得一个字符串的长度:$length = strlen(str);

而js是用对象的方法实现,例如取得一个字符串的长度:var length = str.length。

2、变量传值方式不一样:

js中,变量的传值传递和传址传递是根据传递的对象的类型决定的,不能自己随心控制;

而php中所有类型都可以自由控制其传值是传值还是传址,在变量前加上&就可以变成传址方式,不加&就是传值方式。

3、两者基本特点不一样:

php是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。

js是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。

参考资料来源:百度百科-javascript

参考资料来源:百度百科-PHP