首页 > 代码库 > 网站前端_JavaScript.0005.JavaScript运算表达

网站前端_JavaScript.0005.JavaScript运算表达

一元运算符:

1.递增++递减--


var userAge = 25
console.log(
    // 25 - 保持原样
    userAge,
    // 26 - 在原来的基础上加1并返回
    ++userAge,
    // 25 - 在原来的基础上减1并返回
    --userAge,
    // 25 - 先返回再在原来的基础上减一
    userAge++,
    // 26 - 线返回再在原来的基础上减一
    userAge--
)


2.前置后置区别

说明: 在没有赋值操作,前置和后置一样,但在赋值操作时,前置会先加后返回,后置会先返回在加


3.其它类型效果


// String - 可以转换为数值,返回90
var testValue = ‘89‘; testValue++;console.log(testValue)
// String - 无法转换为数值,返回NaN
var testValue = ‘ff‘; testValue++;console.log(testValue)
// Boolean - 可以返回为数值, 返回1
var testValue = false; testValue++;console.log(testValue)
// Number - 可以转换为数值, 返回3.15
var testValue = ‘3.14‘; testValue++;console.log(testValue)
// Object - 支持转换为数值, 返回2
var testValue = {
    valueOf: function(){
        return 1
    }
}; testValue++;console.log(testValue)


正负运算符:


// String - 自动隐式转换为数值型,失败返回NaN
var testValue = ‘89‘;console.log(+testValue, -testValue)
var testValue = ‘ff‘;console.log(+testValue, -testValue)
// Boolean - 可转换为数值1,返回1, -1
var testValue = true;console.log(+testValue, -testValue)
// Number - 可以转换为数值3.14,返回3.14, -3.14
var testValue = true;console.log(+testValue, -testValue)
// Object - 支持转换为数值,返回1314, -1314
var testValue = {
    toString: function(){
        return 1314
    }
};console.log(+testValue, -testValue)


算术运算符:

1.加法

说明: +在数值运算时表示加法,在字符串拼接时表示拼接,所以从左到右加字符串时会自动拼接字符串


// Number + Number 返回数值
var testValue = 1 + 2;console.log(testValue)
// 任意值 + NaN 返回NaN
var testValue = 1 + NaN; console.log(testValue)
//  Infinity + Infinity 返回Infinity
var testValue = Number.POSITIVE_INFINITY + Number.POSITIVE_INFINITY;console.log(testValue)
// - Infinity + -Infinity 返回 -Infinity
var testValue = Number.NEGATIVE_INFINITY + Number.NEGATIVE_INFINITY;console.log(testValue)
// Infinity + -Infinity 返回NaN
var testValue = Number.POSITIVE_INFINITY + Number.NEGATIVE_INFINITY;console.log(testValue)
// Number + Boolean 返回数值
var testValue = 100 + true;console.log(testValue)
// Number + String 返回字符串
var testValue = 100 + ‘100‘;console.log(testValue)
// Number + Number + String 先计算数值然后转为字符串
var testValue = 100 + 100 + ‘100‘;console.log(testValue)
// Number + 对象 返回依赖对象的valueOf()和toString()的方法
var testValue = 100 + {
    toString: function(){
        return 100
    }
};console.log(testValue)


2.减法

说明: -没有歧义,所以会自动转换两边操作数为数值然后再运算,运算原理同上


3.乘法

说明: -没有歧义,所以会自动转换两边操作数为数值然后再运算,运算原理同上


3.除法

说明: -没有歧义,所以会自动转换两边操作数为数值然后再运算,运算原理同上


4.取模

说明: -没有歧义,所以会自动转换两边操作数为数值然后再运算,运算原理同上


关系运算符:

说明: 用于比较的运算符作为关系运算符(< <= < >= == != === !==)运算符


var userName = {}
var userAge = {}
console.log(
    // 两个操作数都是数值,则数值比较,返回布尔值
    2 > 1,
    // 两个操作数都是字符串,则按照顺序字符串的ascii值比较,返回布尔值
    ‘limanman‘ > ‘liuzhenzhen‘,
    // 其中有一个操作数是数值,而另一个操作数是非纯数字的字符串则会转换为NaN,所以与任何数值比较都为false
    ‘1314A‘ > 1314,
    // 其中有一个操作数是对象,则先调用valueOf()方法或toString()方法,再用结果比较
    ‘521‘ > {
        toString: function(){
            return 520
        },
    },
    // 在不需要转换的任何情况下,null和undefined是相等的,因为undefined继承自null
    null == undefined,
    // 其中一个操作数为NaN时,无论另一个操作数是什么都返回false
    NaN == NaN,
    // 在值相等的基础上类型也要相等判断可使用===
    null == undefined,
    /* 每个新建的对象引用的是不同的地址,可通过==来判断是否引用自同一个地址
     * 可使用var userAge = userName 保证他们引用的是同一个对象地址
     */
    userName == userAge
)


逻辑运算符:

说明: 逻辑运算符通常用于布尔值的操作,一般和关系运算符配合使用,有三个逻辑运算符(AND/OR/NOT),逻辑运算属于短路操作,返回值为最终判定值

1.逻辑运算两边的操作数如果是对象的话,则对象永久返回为真,所以与运算时返回另一个操作数,或运算时返回对象本身

2.逻辑运算两边的操作数如果有一个为NaN或null或undefined则返回NaN/null/undefined

3.逻辑非可以用于任何值,无论值是什么类型的,这运算都会返回一个布尔值,对于NaN/null/undefined返回都是true,逻辑非可以使用多次,多之前次的结果取反


// 逻辑运算符 - 对象横为真
var userInfo = {
    toString: function(){
        // 即使return null时逻辑运算也为true
        return null
    }
}
console.log(
    // 注意: 返回的是&&两边表达式的值不是布尔值,这里返回1314
    userInfo && 1314,
    // 注意: &&时,只判断false,即知道结果,所以直接返回false
    false && userInfo,
    // 注意: ||时,需要判断到userInfo才知道结果,所以返回userInfo
    false || userInfo,
    // 注意: 操作数中第一个为NaN或null或undefined,返回NaN/nall/undefined
    null && undefined,
    null && NaN,
    undefined && null,
    undefined && NaN,
    NaN && undefined,
    NaN && null,
    // 注意: 取反可以对任意数据类型取反,而且支持二次取反,!null, !NaN, !undefined返回true
    !null,
    !NaN,
    !undefined
)


位的运算符:

说明: 位运算比较基于底层,性能和速度都非常好,但是难度比较大,位运算包括非(~),位与(&),位或(|),位异或(^),左移(<<),右移(>>),无符号右移(>>>)

拔高: http://www.zhihu.com/question/38206659, 位运算的奇技淫巧


赋值运算符:


// 普通赋值
var testValue = 100
// 复合赋值
testValue += 100
testValue -= 100
testValue *= 100
testValue /= 100
testValue %= 100
testValue <<= 100
testValue >>= 100
testValue >>>=100


其它运算符:

1.字符串运算符,字符串运算符只有一个,‘+‘,作用是将两个字符串相加,至少一个操作数为字符串

2.逗号运算符,可以在一条语句中执行多个操作

3.三元条件运算符,其实就是if语句的简写形式


// 字符串运算符
var testValue = 100 + ‘100‘
console.log(testValue)
// 逗号运算符
var i = 10, j = 20
console.log(i, j)
// 三元运算符
var testValue = 2>1?"对":"错误"
console.log(testValue)



本文出自 “ζ自动化运维开发之路ζ” 博客,请务必保留此出处http://xmdevops.blog.51cto.com/11144840/1846123

网站前端_JavaScript.0005.JavaScript运算表达