JavaScript的特点
- 解释性语言
解释性语言的程序不要编译,省了道工序,解释性语言在运行程序的时候才翻译,每一个语句都是执行的时候才能翻译。这样解释性语言每执行一次要翻译一次,效率表较低。 如:python,js
编译型就是编译的时候直接编译成机器可以执行的(.exe .dll .ocx),编译和执行是分开的,但是不能跨平台。因为翻译只做了一次,运行的时不要翻译,所以编译型语言的程序执行效率高。如:c,c++
注意java既不是解释性语言也不是编译性语言,因为.java程序要先编译成.class文件,再由jvm解释执行。 - 单线程
一个执行体同时只能干一件事(同步)
补充:在计算机中同步和异步的区别:同步表示只能干一件事,异步表示可以同时干好几件事。 - ECMA标准
为了取得技术优势,微软推出了JScript,CEnvi推出ScriptEase,与JavaScript同样可以在浏览器上运行。为了统一规格JavaScript兼容与ECMA标准,因此也称为ECMAScript。
JavaScript的三大大部分
- ECMAScript:描述了该语言的语法和基本对象,如类型、运算、流程控制、面向对象、异常等。
- DOM:文档对象模型,描述处理网页内容的方法和接口。
- BOM:浏览器对象模型,描述与浏览器进行交互的方法和接口。
浏览器的组成
- shell
- 内核:渲染引擎(语法规则和渲染)、js引擎、其他模块
几大主流浏览器
浏览器 | 内核 |
---|---|
IE | trident |
Chrome | webkit/blink |
firefox | Gecko |
Opera | presto |
Safari | webkit |
引入js的两种方法
- 在页面内嵌入<script><script>标签,
- 在外部引入<script src=“location” ><script>
注意:
- 为符合web标准(w3c标准中的一项)结构、样式、行为相分离。通常会采取外部引入。
- <script type=“text/javascript” ><script>中type="text/javascript"可以不写,但是不能写错。
- 页面内嵌的方法引入和外部引入不能同时使用,否则只有外部引用有效。
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script type="text/javascript" src="1.js">
document.write('内嵌');
</script>
</body>
</html>
1.js
document.write('外部引入');
运行结果:外部引入
js中的变量
- 严格来说,html和css并不是一门编程语言,因为其中没有变量
- 变量的声明:var a; var a,b,c,d;
- 变量赋值:a=100;
- 可以在声明的时候直接赋值:var a=10;
- 变量命名规则:
- 变量名必须以英文字母、_、$开头
- 变量名可以包括英文字母、_、$和数字
- 不可使用系统的关键字、保留字(现在还没有被使用,但以后可能会使用)作为变量名
js基本语法
1.值类型-数据类型
- 不可改变的原始值(栈stack数据):Number(数字:包括整数和小数)、String(字符串类型,单引号和双引号都行)、Boolean(布尔)、undefined(声明但是没有赋值)、null(表示一种占位,表示空)
- 引用值(堆heap数据):array(数组)、object(对象)、function(方法)等等。
区别
原始值:栈内存的赋值为拷贝赋值
var a=10;
var b=a;
a=20;
document.write(a);//20
document.write(b);//10
引用值:
var a=[1];
var b=a;
a.push(2)
document.writeln(a);//[1,2]
document.writeln(b);//[1,2]
js语句基本规则
- 语句后面要用分号结尾
- 书写格式要规范,"= + - * /"两边都应该有空格
- js语法错误会引发后续代码终止。但不会影响其他代码块,例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
var a=10;
document.writeln(b);//会报错:Uncaught ReferenceError: b is not defined
document.writeln(a);//a不会被打印
//但是下面代码块中的hello world还会被打印
</script>
<script type="text/javascript">
document.writeln('hello world');
</script>
</body>
</html>
js运算符
- “+”:
- 数学运算,字符串链接
- 任何类型加上字符串都等于字符串
- “-”、"*"、"/"、"%"、"="、"()"
- 优先级"=“最弱,”()"优先级较高
- 此外还有"+="、"-="、"/="、"%="、"*="、"++"、"–"(和java/c/c++一样,不再赘述)
- 下面演示一些和静态语言不同的特性:
document.writeln(1/0);//Infinity:表示无穷,属于Number类型
document.writeln(-1/0);//-Infinity
document.writeln(0/0);//NAN:表示不是一个数字(Not a Number),属于Number类型
练习:
var a = 10;
var b = ++a -1 + a++;
document.write(b+' '+a);//21 12相当于b=(++a)-1+(a++)=11-1+11
var a = 1;
var b = a++ + 1;
document.write(b); //2
var c = 1;
var d = ++c + 1;
document.write(d); //3
var a = 1;
var b = a-- + --a;
document.write(b); //0 相当于b=(a--)+(--a)=1+(-1)
document.write(a); //-1
var a = 1;
var b = --a + --a;
document.write(b); //-1 相当于b=(--a)+(--a)=0+(-1)
document.write(a); //-1
var a = 0;
a %= 5;//0 0对其他数取余为0