JavaScript基本概念(操作符,语句,函数)

操作符包括算术操作符、位操作符、关系操作符、相等操作符。操作符一般用于数值型,如果不是数值型会被转换成数值型,对象会先调用valueOf(),不能计算的话,调用toString()

一元操作符

只能操作一个值的操作符叫做一元操作符

递增和递减操作符

前置和后置的自增和自减操作符
++ --
不展开了
非计算值的操作举例

var s1 = "2"
var s2 = "z"
var b = false
var f = 1.1
var o = {
  valueOf:function(){
    return -1;
  }
}

s1++ //3
s2++ //NaN
b++ //1
f-- //0.100000000000009
o--//-2
一元加减操作符

+放在数值前面没有影响,放在非数值前会使用Number()转成数值
-用于表示负数,放在非数值前会使用Number()转成数值

位操作符

ECMAScript中数值都是以64位存储,但位操作符不直接操作64位值,会先转换成32位,然后计算,然后再转换回64位。
对于有符号的整数,32位中前31位表示数值,第32位表示符号位,0为正数,1为负数。18的二进制表示00000000000000000000000000010010,或者10010。负数也以二进制码表示,但是负数使用的是补码。计算补码的步骤为:

  • 求数值绝对值的二进制码
  • 求得到的二进制码反码
  • 反码加1

-18 的计算机二进制表示
绝对值的二进制码:0000 0000 0000 0000 0000 0000 0001 0010
反码:1111 1111 1111 1111 1111 1111 1110 1101
加1:1111 1111 1111 1111 1111 1111 1110 1110
处理有符号整数时,位31不能访问,位31就是第32位
默认ECMAScript中,整数都是有符号整数,当然也有无符号整数,无符号整数都是正数,范围更大。
64->32->64,这种方式的处理会导致副作用,NaNInfinity应用位操作时,会被当做0处理
1、按位非(NOT)
~0110
25求反-26 -26求反25
按位非的本质:操作数的负值-1(和计算机中负数的表示法有关)
2、按位与(AND)
&1&111&000&00
3、按位或(OR)
|1|111|010|00
4、按位异或(XOR)
^,相同为0,相反为1
5、左移
<<,左移不移符号位,左移n位,数值扩大2的n次方
6、右移
>>,此种右移也不移符号位,右移n位,数值缩小2的n次方
7、符号右移
>>>,此种右移会移动符号位,由于移位操作符都是以0作为填充,所以负数(符号位用1表示)符号右移会变成正数,同时符号右移越小,数值越巨大。正数符号右移,和正常的右移相同

布尔操作符

又叫逻辑操作符,有与或非

!falsetruetruefalse,可以应用于任意类型,会先将值转换成boolean类型。转换规则如下:

&&,真真为真,真假为假,假假为假

||,真真为真,真假为真,假假为假

乘性操作符

乘法
除法
求模

加性操作符

加法
减法

关系操作符

小于(<),大于(>),大于等于(>=),小于等于(<=)

相等操作符

相等和不相等
全等和不全等

三目运算符

?:

赋值操作符

逗号操作符

语句

if语句
do-while语句
while语句
for语句
for-in
label
break continue
with
switch

以上东西太繁琐,以后慢慢补充

函数

语法

function 函数名(参数表){
函数体
}

函数不必指定返回值类型,可以用return返回任意值
函数示例

function abc(a,b,c) {
    alert(a+b+c)
}
abc(1,2,3)

只写return,不写值,会返回undefined,不写return,也会返回undefined

函数参数

ECMAScript函数参数其实是一个数组,名为arguments,函数调用不必完全遵循函数定义,可以传多个参数,也可以不传任何参数。arguments其实只是与数组类似,因为支持下标语法。比如按照参数传入顺序依次取值,arguments[0]arguments[1]arguments[2],使用length属性确定参数个数。

function abc(a,b,c) { 
  alert(arguments[0]+arguments[1]+arguments[2])
}
abc(1,2,3)

不按函数原型调用

function abc() { 
   alert(arguments[0]+arguments[1]+arguments[2])
}
abc(1,2,3)

函数不支持重载,但是我可以使用一些手段实现函数重载

function doAdd() {
    if(arguments.length == 1){
        return arguments[0] 
     }else if(arguments.length == 2){
        return arguments[0] + arguments[1]   
     }else if(arguments.length == 3){  
        return arguments[0] + arguments[1] + arguments[2]
  }
}
alert(doAdd(1))
alert(doAdd(1,2))
alert(doAdd(1,2,3))

arguments中的值和参数名的值保持一致

function abc(a) {
    a = 100
    alert(arguments[0])
}
abc(1)

function abc(a) {
    arguments[0] = 100
    alert(a)
}
abc(1)

这并不是说,argumentsa内存是一份,其实是两份,只不过js帮我们让这两个值保持一致了,另外高程上说,修改参数,不会反映到arguments,可是经过试验,这种一致是双向的。
arguments的length属性的长度是由实际传入参数决定的,不是由函数定义决定的。没有传入值的参数会被自动赋值为undefinedECMAScript中的所有参数传递都是值传递,没有引用传递。ECMAScript也不支持函数重载,同名函数会被后一个覆盖。

你可能感兴趣的:(JavaScript基本概念(操作符,语句,函数))