JavaScript引入方式
内嵌
<script>
document.write('hello,javascript!');
</script>
引入文件
<script type="text/javascript" src="js文件位置"></script>
js基本语法
变量声明 var
var a;
//声明变量
var b,
c = 0,
d = true;
//同时声明多个变量并可赋初始值
a = 'hello,javascript!';
//变量赋值
document.write(a);
//使用变量
变量类型
- 原始值:Number String Boolean undefined null(栈数据)
- 存储在栈区的数据,无法添加、删除属性,如果直接赋值给另一个变量,两个变量互不影响,修改其中任意一个变量的值,都对另一个变量的值无影响。
var a = 10;
//变量的类型按赋值的类型决定的,a 为Number。
var b = a;
//变量的类型按赋值的类型决定的,a 也为Number。
a = 20;
document.write("a的值:" + a + "<br/>");
document.write("b的值:" + b + "<br/>");
//a的值:20
//b的值:10
//原始值变量存储空间是相互独立的,修改 a 变量的值,不会影响 b 变量的值。
- 引用值: Object(堆数据)
- 引用类型的变量存储的是指向存储空间的地址,多个引用类型的变量可以指向相同的存储空间
相当于一个人(存储空间)有多个联系方式(引用值变量),通过不同的联系方式(指针)都可以找到这人(存储空间)
修改和删除引用值相当于修改的地址
var a = [1,2,3,4];
//变量的类型按赋值的类型决定的,a 为Array。
var b = a;
//变量的类型按赋值的类型决定的,b 为Array并与 a 指向相同的存储空间。
a.push(5);
//通过变量 a 向存储空间添加数据。
document.write("a的值:" + a + "<br/>");
document.write("b的值:" + b + "<br/>");
//a的值:1,2,3,4,5
//b的值:1,2,3,4,5
//引用值变量存储的是存储空间的地址,修改变量 a 的值,也就是修改了存储空间中的值,因为 b 的存储空间与 a 相同所以值也变更。
堆栈
两者都是存放临时数据的地方。
栈是先进后出的,就像一个桶,后进去的先出来,它下面本来有的东西要等其他出来之后才能出来。
堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。对于堆,我们可以随心所欲的进行增加变量和删除变量,不用遵循次序。
栈区(stack) 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。
堆区(heap) 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。
堆(数据结构):堆可以被看成是一棵树,如:堆排序;
栈(数据结构):一种先进后出的数据结构。
变量命名规则
+ 变量首字母以英文字母、_(下划线)、$ 开头。
+ 变量可以包含英文字母、_(下划线)、$ 、数字。
+ 不能以JavaScript的关键字、保留字命名变量。
+ 下表是js中的一些关键字和保留字
运算符类型
算数运算符
+ - * / % ++ --
+的作用:数字相加运算,字符串连接,任何数据类型+字符串都会转成字符串
0作为一个数学运算中的基本符号,在计算机程序中也大量被使用,最基本的就是提高运算优先级
赋值运算符
= += -= *= /= %=
赋值运算符(=)的优先级最低 ()优先级最高
//运算符运用,确定不了优先级时,用()提升表达式优先级(推荐)。
var d = 10;
var e = 10;
document.write("++d:" + (++d) + "<br/>");
-------分割线--------
var a = 123;
var b = 234;
a = a + b;
b = a - b;
a = a - b;
document.write("a:" + a + " b:" + b);
比较运算符
= == === != < <= > >=
var sp = ","; //输出时用于分割
var a = "10" > "2"; //字符串顺序比较各位字符的ASCII码
var b = 10 > 2;
var c = 10 == 2;
var d = 10 != 2;
var e = Infinity == Infinity; //无穷大比较
var f = NaN == NaN; //非数比较特殊,自己不等于自己
var g = null == null;
var h = undefined == undefined;
document.write(a,sp,b,sp,c,sp,d,sp,e,sp,f,sp,g,sp,h);
逻辑运算符
+ && || !
//逻辑运算符&&:左面表达式如果为真,返回右面表达式的值,否则返回左面表达式的值。
//undefined, null, NaN, "", 0, false 都为假;
var sp = ",",
a = 1 && 2,
b = 1 && 0,
c = 1 && true,
d = 1 && false,
e = 0 && 2,
f = 0 && 0,
g = 0 && true,
h = 0 && false;
document.write(a,sp,b,sp,c,sp,d,sp,e,sp,f,sp,g,sp,h);
//逻辑运算符||:左面表达式如果为真,返回左面表达式的值,否则返回右面表达式的值。
a = 1 || 2;
b = 1 || 0;
c = 1 || true;
d = 1 || false;
e = 0 || 2;
f = 0 || 0;
g = 0 || true;
h = 0 || false;
document.write(a,sp,b,sp,c,sp,d,sp,e,sp,f,sp,g,sp,h);
//逻辑运算符!:把表达式转成Boolean类型并取反。
document.write(!a,sp,!b,sp,!c,sp,!d,sp,!e,sp,!f,sp,!g,sp,!h);
位运算符
基本不用 就不写了
三目运算符
?:
var a = 8;
var b = 2;
document.write(a > b ? a - b : b - a);
//如果 a 大于 b,则执行 a - b,否则执行 b - a。