变量:
变量的含义:就是用于表示一个数据的代号——我们自己定义的一个名字。
变量的定义:var v1; var v2 = 2; var v3, v4, v5; var v6, v7=7, v8, v9=”abc”;
变量的使用:
赋值:v1 = 1; v1 = 1+2+3; v1 = v2 + “abc”; v1 = v1 + 5; v1 = v1 + v1;
取值:m1 = v1; //将v1的值取到,再赋值给m1
m2 = v1 + 5; //将v1的值取到,再跟5相加,然后赋值给m2
alert( v1 ); //将v1的值取到,并交给alert去“弹出”
document.write( v1 ); //将v1的值取到,并交给document.write去“输出”
alert( “v1=” + v1); //取到v1的值,并和字符串“v1=”进行连接运算,然后结果被alert。
document.write( “v1=” + v1);
数据类型:
基本类型:
布尔类型: boolean; 这种类型只有两个值可用: true, false
字符串类型: string; 可以用单引号或双引号表示,含义相同;
数字类型: number
复合类型:
数组: Array,
对象: Object
特殊类型:
null:空类型——可以给一个变量明确赋值为“null”,这就是空值,也是空类型,只是表示一个“含义”:该变量没有给有效值。
undefined: 未定义:此类型通常就是对应“根本就还没有给值”这种状态。
算术运算符: + - * / %
注意点:
1, 除法(/)就是数学上的自然除,而不是C语言的除法含义。
2, ++ 和 -- 称为一元运算符,即只针对一个变量进行运算
3, 但 ++ 和 – 可以在表达式(比如赋值语句)中使用,则类似同时进行了2件事:自加(或自减)和表达式本身的计算,此时他们放在变量的前面和后面有不同含义。
a) var i = 1; var s1 = i++; //结果是:s1为1,i为2
b) var i = 1; var s2 = ++i; //结果是:s2为2,i为2
比较运算符:> >= < <= == != === !==
比较运算符用于数据的大小比较,通常是数字。其中值得注意的是:
==被称为“模糊相等”,即数据的内容或经过转换后的内容相等,就认为是相等。
===称为“严格相等”,只有数据的类型和数据的内容都相等的时候才算是相等。
——从计算机的角度来说,一个数据具有两个方面:数据类型和数据值(数据内容)
逻辑运算符:只用于对bool值进行运算。
逻辑与( && ):两个数据只有都是true的时候,结果才是true
逻辑或( || ):两个数据只要有一个是true,结果就是true
逻辑非( ! ):获取一个bool值的“相反值”
字符串运算符:
只有一个连接运算符( + ): 含义是“连接两个字符串”
辨析算术运算符的加法( + ):
此加号( + )两个的数据只要有一个是字符串,则都会按字符串的“连接”含义进行运算,另一如果不是字符串,则会自动转换为字符串后再进行连接运算。
位运算符:位运算符只针对数字的二进制形式进行。
var v1 = 5; //这是10进制,二进制其实是:101,在计算机内部其实类似这样: 00000101
var v2 = 6; //这是10进制,二进制其实是:110,在计算机内部其实类似这样: 00000110
按位与:
符号: &
含义:将两个二进制数字的对应位上的数字进行“与运算”,结果还是这些位运算的结果组成的二进制数所代表的值。
解释:二进制数字进行“与运算”的规则是:
1 & 1 è 1
1 & 0 è 0
0 & 1 è 0
0 & 0 è 0
举例:
var v1 = 5, v2 = 6,运算图示为:
v1=5 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
v2=6 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
v1 & v2 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
var v3 = v1 & v2 = 00000100(2) = 4(10)
按位或:
符号: |
含义:将两个二进制数字的对应位上的数字进行“或运算”,结果是这些位运算的结果组成的二进制数所代表的值。
解释:二进制数字进行“或运算”的规则是:
1 | 1 è 1
1 | 0 è 1
0 | 1 è 1
0 | 0 è 0
按位非:
符号: ~ //这是一个“单目运算符”
含义:将一个二进制数字的对应位上的数字进行“非运算”,结果是这些二进制数字所代表的值。
解释:二进制数字进行“非运算”的规则是:
~1 è 0
~0 è 1
按位左移运算:
符号: <<
含义: 将一个二进制数的每一个位上的数字往左边移动指定的位数,并且左边“冒”出去的就不管了(不算了),右边空出来的位上填入“0”,得到的结果就是该二进制数字所代表的值。
举例:
var v1 = 5;var v2 = 5 << 2; 运算图示为:
v1=5 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
v2= 5 << 2 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
var v2 = 5 << 2 = 00010100(2) = 1 * 24 + 1*22 = 16+4 = 20(10)
按位左移运算:
符号: >>
含义: 将一个二进制数的每一个位上的数字往右边移动指定的位数,并且右边“冒”出去的就不管了(不算了),左边空出来的位上填入原来的左边的数字,得到的结果就是该二进制数字所代表的值。
举例:
var v1 = 5;var v2 = 5 >> 2; 运算图示为:
v1=5 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
v2= 5 >> 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
var v2 = 5 >> 2 = 00000001(2) = 1(10)
运算符其他内容:赋值运算符:其实就一个基本的赋值运算符: = ,其含义是将等号右边的数据放到等号左边的变量中去。
错误的语法:
var v1 = 1, v2 = 2, v3 = 5, v4 = -2;
v1 + v2 = v3 + v4; //错,大错,大错特错
复合赋值运算符: += -= *= /= %=
运算符的优先级 —— 太多,较为复杂,记不住,但请记住一下几条规则:
1, 要心如明镜:运算符有优先级(先后顺序)问题。
2, 括号最优先,等号(赋值)最落后。
3, 先乘除后加减
4, 想不清楚或用不明白的,使用括号来解决
5, 括号只有小括号,可以一层层嵌套。
举例:
var year = 2013;
//判断闰年:一个年份能被4整除并且不能被100整除是闰年,或者能被400整除,也是闰年。
if ( ( (year % 4 == 0) && (year % 100 != 0) ) || (year % 400 == 0) )
{ documment.write( year + “是闰年”) ;}
数据的传值方式:var v1 = 10;
var v2 = v1; //将v1中值拷贝一份,放到v2这个变量中去了——此时也可以说成“将v1的值传递给v2”
var v1 = v1 + v1; //v1的值改变了,但并不影响v2——因为v2本身也是一个独立的变量。
document.write("<br />v1=" + v1); //20
document.write("<br />v2=" + v2); //10, 不会,40,
上述“v2 = v1”就称为“拷贝传值”——取得v1的值并拷贝一份,然后赋值给v2
var v3 = {name:"小花", age:18, edu:"大学" }; //这是一个所谓“对象”类型——其中包括了3个数据。
//操作其中的数据类似这样:
document.write("<br />v3这个对象的年龄为:" + v3.age);
v3.age = 19; //v3这个对象的age这项数据的值重复赋了一个新值,类似前面v1 = 20;
var v4 = v3; //此时,是将v3这个变量的“内存地址”传递给v4这个变量,而v3这个对象的数据本身其实只是由该地址来获取。——这就叫做引用传值——此时,其实这两个变量是一样的数据内容,类似一个人的多个名字:真名,艺名,网名,小名
document.write("<br />v4这个对象的年龄为:" + v4.age);
v3.age = 20; //
document.write("<br />此时,v4这个对象的年龄为:" + v4.age);
总结:
在js中,基本数据类型使用 “拷贝传值”——传值的时候直接就出现了一份新的数据(当然同时也是另一个变量所代表)
复合数据类型(数组和对象)使用“引用传值”——传值的时候只是做了一个地址指向,数据仍然只有一份,两个变量就指向这同一份数据。
if分支结构:控制结构:就是使用一定的语法来控制我们程序执行的流程——也可以叫“流程控制结构”
分支就是“多条路径,走一条”。
最简形式:
//如果此条件满足(即条件判断的结果是tr
新闻热点
疑难解答