初识JavaScript
1 JavaScript出现的社会背景
在JavaScript出现之前所有的表单验证的工作都要在服务器进行。造成服务器的压力越来越大,所以就将某些验证的工作放到客户端中进行。这时就需要浏览器和用户之间产生交互,就这样JavaScript 出现了。
2 JavaScript语言特点
2.1 脚本与非脚本
脚本语言:直接由底层的引擎解释源代码执行。
非脚本语言:一般会产生中间的产物。先将源代码编译为某种中间的文件。然后再执行中间的文件。
2.2 JavaScript 语言的特点:
(1)脚本语言:直接由底层的引擎解释源代码执行。
(2)动态的语言:在解释执行的过程中动态的判断数据的类型。
(3)弱类型的语言:所有的数据都是一种类型。数据的实际类型都是在解释执行的时候动态判断的。
(4)基于原型的语言:涉及到了继承的内容。
举例:
java是基于模板继承。(比如要造一辆汽车。先造一个汽车的生产线。通过生产线去生产汽车。)
js是基于原型继承(已经存在了一辆汽车,在该基础上去改造成我需要的汽车。)
3 JavaScript构成
JavaScript语言由三部分构成:
(1)核心部分ECMAScript:规定了js的基本语法。支持什么样子的数据类型。流程控制、如何定义数组、方法、对象等。
(2)DOM:document object model:在DOM中定义了很多的属性和方法,用来操作页面文档中的内容。DOM规定了如何和页面文档交互。
(3)BOM:browser object model:浏览器对象模型。规定了通过js如何和浏览器交互。
4 html中引入js的三种方式
(1)行内式:直接在开始标签中内嵌js代码。一般结合事件使用。使用率不高。
(2)内部方式:在html文档中使用scirpt 标签。将js代码在标签内使用。
加载执行的顺序为从上到下,标签的个数也没有限制。
一般的使用的方式,就是先定义对应的页面的内容,然后再在script标签
内通过js代码操作对应的页面的内容。
(3)外部方式:创建单独的js文件,加载执行时按照顺序来的。
注:一旦使用了外部引入js代码的方式,外部的优先级最高。
5 js输出内容的方式:
(1)alert(信息)
特点:
1:阻塞式方法,会暂停当前的程序的执行。不点击确定,不能执行后续的代码。
2:该方法属于浏览器窗口的方法,弹窗的风格在各个浏览器之间是不同的。取决于浏览器的设定。
3:可以直接使用,也可以通过window对象去调用。
(2)console.log(信息)
在控制台输出内容,不是阻塞式的方法。
(3)document.write(信息)
在页面中输出内容。
<script>
alert("hellowrold!");
window.alert("helloworld!");
console.log ("helloworld");
document.write("helloworld!");
</script>
6 标识符
程序需要处理的数据在内存中,在程序中,通过给要处理的数据所占的内存起名字 来访问数据所在的内存。内存的名字专业的称谓是:【标识符】。
6.1标识符命名规则:
(1)标识符的组成由:字符、数字、下划线、$.构成。
(2)标识符不能以数字开头。
(3)标识符大小写敏感,a 和 A 是两个不同的名字。
(4)长度没有限制。不要太长。也不能太短。
(5)不能使用js中的关键字(保留字)。 在js语言中具有特殊意义的符号。 关键字比较多,没有必要去特殊的记忆。随学随记。
6.2标识符命名规范:
标识符的命名规范: 软件编程人员多年总结的一种公共的认知。
(1)见名知意。通过标识符的名字就能知道所在的内存的数据代表了什么。
(2)遵循驼峰命名法: studentName stuName。多个单词构成,单词的首字符大写。
(3)不要使用拼音。使用英文单词,或者是单词缩写。
(4)不要使用单字符标识符。一般只有在for循环中使用单字符标识符。
总结:标识符有很多种,每种标识符的命名规范略有不同。:
1:标识符存在的意义: 使用标识符来对应一块内存,通过标识符就可以访问对应的内存中的数据。 2:标识符的命名规则: 3:还有遵守标识符的命名的规范:会让你显得很专业。 4:后面会接触到很多种类标识符。
7 变量
7.1 定义标识符的过程
定义标识符的过程: 需求:定义一个标识符,代表了一个年龄的数据。标识符的名字就是age。 给它一个初始的值。20; 通过标识符访问内存中的数据。就两种诉求:
(1):获得内存中的数据。 直接通过标识符的名字就可以使用标识符所对应的内存中的数据。
(2):修改内存中的数据。 要使用 = 赋值运算符。直接给age 标识符赋一个新的值。
7.2 变量的概念
标识符还有一个使用率更高的名字:变量。 变量是一种标识符。
变量的概念:变量的本质是一块有名字的内存区域,该区域中的数据可以被访问和修改。
<script>
/*
//定义标识符
var age = 20;
//将age标识符对应的内存中的数据输出。
console.log ("age = " + age);
//使用age对应的内存中的数据,减去1之后的结果,修改到age对应的内存中。
age = age - 1;
console.log ("age = " + age);*/
//定义若干个变量,来保存一下自己的属性,并打印到控制台。
var name = "小白";
var age = 20;
var gender = "男";
var salay = 1000000;
var height = 175;
var weight = 135;
var isHandsome = false;
var car = null;
//模式字符串
console.log (`${name}的年龄是${age},性别是${gender},理想的工资是${salay},身高是${height},体重是${weight}`);
</script>
7.2.1变量的定义的语法
变量的定义的语法:
var 变量名 = 初始值;
var:是js中的一个关键字。用来定义或者声明变量的。 是单词variable。
变量名:要遵循标识符的命名规则,如果是多个单词构成,第一个单词的首字符小写,从第二个单词开始每个单词的首字符大写。 = :赋值运算符,将右边的值赋值给左边的变量。 初始值:是任意的js支持的数据类型的数据。
7.2.2声明变量和定义变量
声明变量的语法:
var 变量名;
定义变量的语法:
var 变量名 = 初始值;
**区别:**定义变量等于:声明+赋初值
7.2.2定义声明变量的多种语法
定义声明变量的多种语法:看下边的示例
(1)建议:变量定义好之后,再使用该变量。先定义后使用。
(2)在其他的语言中,必须先定义后使用。在js中可以在定义之前使用该变量。 该变量的值为 undefined。未定义的意思。
(3) 定义变量等价于,声明变量,然后再赋初值。
(4)如果只是声明变量,没有赋值,那么变量保存的值是undefined;
(5) 定义变量也好,声明变量也好,在js代码加载执行的时候。在script代码块中 声明定义的所有的变量,都会提升到代码的最前面进行声明。
(6) 在script中定义的变量,全局变量。作为window对象的属性存在。 还可以通过window.变量名 访问该变量。
(7)在js中变量是可以重复定义的。不建议。最后变量保存的是最后的值。 后定义的后覆盖前面的。
(8) 变量的分为全局变量和局部变量。全局的是在script中方法外定义的。局部的是在方法内定义的。
<script>
var age;
console.log (age);//undefined;
age = 20;
console.log (age);//20
//声明变量,再赋值
console.log (value);//undefined
var value;
console.log (value);//undefined
value = 100;
console.log (value);
console.log (window.value);
//一次性的可以定义声明多个变量
//一次性声明了3个变量。undefined。
var num1, num2, num3;
num1 = 100;
// 一次性定义了三个变量
var val1 = 100, val2 = 200, val3 = 300;
//声明和定义混合
var value0, value1 = 100, value2, value3 = 300;
//变量的重复定义
var age = 20;
var age = 30;
var age = 100;
console.log (age);
</script>
8 常量
常量:就是不变的量。
js中的常量分为两种:
(1)字面常量。
如:12 12.99 “hello” true false null undefined;
(2) const 修饰的变量。 不可改变的变量。 const 是js中的关键字,用来定义常量的。
8.1 语法
语法: const 常量名 = 初始值;
const 定义的变量,只能赋值一次。赋值之后不能被修改。只能被读取使用。 也可以const修饰的变量称为【只读变量】。 const 是constant 单词的缩写。 只读变量 的名字有自己单独的命名规范: 所有的字符都要大写。多个单词构成,单词之间使用下划线分隔。
如: const MAX_AGE = 200; const MAX_STUDENT_COUNT = 50;
<body>
<!--
练习:通过键盘输入一个整数,代表了圆的半径,然后求圆的面积和周长。并打印到控制台。
如果代码中使用了大量的字面常量问题
1:代码的可读性很差。
2:维护成本很高。
-->
<script>
/*
//输入一个值,定义变量接收该值。
var raduis = Number (prompt ("请输入圆的半径"));
//定义变量表示面积,利用面积的公式,求圆的面积。
var area = 3.1415926 * raduis * raduis;
//定义变量表示周长,利用周长的公司,求圆的周长。
var perimeter = 2 * 3.1415926 * raduis;
//利用模式字符串,打印周长和面积
console.log (`半径是${raduis}的圆的周长是${perimeter}`);
console.log (`半径是${raduis}的圆的面积是${area}`);*/
//上述代码的问题?? 修改精度比较费劲。
//修改。使用变量保存pi。 问题,存在安全隐患。pi可以被修改。
/* var raduis = Number (prompt ("请输入圆的半径"));
var pi = 3.14;
var area = pi * raduis * raduis;
var perimeter = 2 * pi * raduis;
console.log (`半径是${raduis}的圆的周长是${perimeter}`);
console.log (`半径是${raduis}的圆的面积是${area}`);*/
//最终版
var raduis = Number (prompt ("请输入圆的半径"));
const PI = 3.14;
var area = PI * raduis * raduis;
var perimeter = 2 * PI * raduis;
console.log (`半径是${raduis}的圆的周长是${perimeter}`);
console.log (`半径是${raduis}的圆的面积是${area}`);
</script>
</body>
9 注释
注释:comments
注释的作用:
帮助程序员理解记忆阅读代码。不参与代码的执行。
注释一共有三种形式:
(1)单行注释。 // 后面的内容都是注释, 紧挨着要注释的代码。 取消和添加注释:快捷键:ctrl+/
(2) /多行注释的内容/ 可以跨行,也可以是一行,或者是一行中的一部分。
(3)文档注释 /** 注释的内容 */ 给方法添加注释。
注:给代码添加合适的注释,是一个程序员的基本素养。
<script>
//a表示一个身高的变量
var a = 100;//a表示一个身高的变量
/*
* 我是注释
* 我是注释
* 我是注释
* */
var num = 10 + /*20 + 40 + 30 + */90;
/**
* 求3个数的最大值。
* @param num1 第一个数
* @param num2 第二个数
* @param num3 第三个数
* return 返回三个数的最大值。
*/
function max(num1,num2,num3) {
}
//TODO 我写到了什么什么位置了。
10 浮点数不能进行精确运算
console.log (3.14 * 12 * 12);//452.15999999999997
/*
浮点数不能进行精确运算的原因说明:
计算机底层表示数据的时候都是使用二进制。整数部分小数部分都是二进制。
举例:
二进制 0.1 对应着十进制的多少?0.5
二进制 0.01 对应着十进制多少?0.25
浮点数本身就不适合做精确运算。 Math.js