JavaScript ( ECMAScript )是一个脚本语言。它是一个轻量级,但功能强大的编程语言。
浏览器组成
渲染引擎 :用来解析 HTML 与 CSS,俗称内核。
JS 引擎 :JS 解释器,用来读取网页中的 JavaScript 代码,对代码处理后运行。
浏览器本身不会执行 JS 代码,而是通过内置的 JS 解释器来执行 JS 代码。JS 引擎执行代码时,逐行解释每一句源码,然后由计算机去执行,所以 JavaScript 语言归为脚本语言,会逐行解释执行。
JavaScript 书写规范
1、文件编码统一为 utf-8, 书写过程过,每行代码结束必须有分号;
2、JavaScript 严格区分大小写,书写时请注意
3、库引入:原则上仅引入 jQuery 库,若需引入第三方库,须与团队其他人员讨论决定;
4、变量命名:驼峰式命名。要求变量集中声明,避免全局变量
-
原生 JavaScript 变量要求是纯英文字母,首字母须小写,如 iJavaScript;
-
jQuery 变量要求首字符为’_’, 其他与原生 JavaScript 规则相同,如: _iJaveScript;
5、类命名:首字母大写,驼峰式命名。如 IJaveScript;
6、函数命名:首字母小写驼峰式命名。如 iJaveScript ();
7、命名语义化,尽可能利用英文单词或其缩写;
8、尽量避免使用存在兼容性及消耗资源的方法或属性,比如 eval () & innerText;
9、后期优化中,JavaScript 非注释类中文字符须转换成 unicode 编码使用,以避免编码错误时乱码显示;
10、注重与 html 分离,减小 reflow, 注重浏览器性能。
JavaScript 脚本执行顺序
第一步定义: 分为变量定义和函数定义
第二步执行: 先从上往下定义完所有的内容后,会从上往下执行;除了变量和函数定义外的其他内容都会执行;如:赋值、函数调用
第三步查找:能在栈里面找到的,就不去堆里面找,因为栈空间小,就近原则会在栈里面开辟,就能找到堆里面的地址
JavaScript显示数据
JavaScript 可以通过不同的方式来输出数据:
- 使用 alert() 弹出警告框
- 使用 console.log() 写入到浏览器的控制台
- 使用 prompt() 弹出可输入的对话框
- 使用 document.write() 方法将内容输出到到 HTML 文档页面中
- 绝对不要在文档 (DOM) 加载完成之后使用 document.write(),这会覆盖该文档
- 使用 .innerHTML 写入到 HTML 元素
数据类型和变量
数据类型
| Type | Desc |
|---|---|
| number | 数字,不区分整数和浮点数;以 64 位浮点型数据(float)来存储;NaN(Not a Number);Infinity(∞) |
| string | 字符串是以单引号'或双引号"括起来的任意文本 |
| boolean | 一个布尔值只有true、false两种值 |
| null | null 表示一个"空"的值,它和0以及空字符串''不同,0是一个数值,''表示长度为0的字符串 |
| undefine | 未定义,如果一个变量没有初始化值,则默认复制为 undefine |
| object | 对象,JavaScript的对象是一组由键-值对组成的无序集合;对象变量.属性名 获取对象属性 |
| 逻辑运算符 | 与运算:&&;或运算:||;非运算:! |
| 比较运算符 | ==比较,会自动转换数据类型再比较;===比较,不会自动转换数据类型,如果数据类型不一致返回false,再比较 |
| strict 模式 | 在 strict 模式下运行的JavaScript代码,强制通过 var申明变量,未使用var申明变量就使用的,将导致运行错误。启用strict模式的方法是在JavaScript代码的第一行写上:'use strict' |
变量
变量名是大小写英文、数字、$和_的组合,且不能用数字开头;使用等号=对变量进行赋值;变量只能用var申明一次。
var age = 10;
- var 是一个关键字,用来声明变量。使用该关键字声明变量后,计算机会自动为变量分配内存空间
- age 自定义的变量名,通过该变量名来访问该内存中分配的空间
- 变量值是保存到变量空间里面的值
数据类型转换
检测变量数据类型:console.log(typeof var_value)
| typeof | Desc | typeof | Desc |
|---|---|---|---|
| number | 如果变量是Number类型的 | boolean | 如果变量是Boolean类型的 |
| string | 如果变量是String类型的 | object | 如果变量是引用类型或null类型的 |
| undefined | 如果变量是undefined类型的 |
数据类型间的转换方法:
| Method | Desc | Method | Desc |
|---|---|---|---|
| number.toString() | 转成字符串 | parseInt(string) | 将string类型转换成整数 |
| String(number) | 强制转换,转成字符串 | parseFloat(string) | 将string类型转换成浮点数 |
| 加号拼接字符串 | 和字符串拼接的结果都是字符串 | Number(string) | 将string类型转换为数值型 |
运算符
| Type | List | Desc |
|---|---|---|
| 一元运算符 | ++,- -,+(正号) | ++(- -)在前,先自增(减),再运算;++(- -)在后,先运算,再自增(减) |
| 算术运算符 | +,-,*,/,% | %,求模运算 |
| 赋值运算符 | =,+=,-= | 和数学运算符逻辑相同 |
| 比较运算符 | >,<,>=,<=,==,===(全等) | 类型相同,直接比较;不同,先进行类型转换,然后比较; |
| === 全等于 | 比较前先校验类型,类型不一样,直接返回 false | |
| 逻辑运算符 | &&,||,! | && / || 短路;number : 0或NaN为假;string : 空字符串” “为假; |
| null & undefine : 都是 false;对象 : 所有对象都为 true | ||
| 三元运算符 | 表达式 ? true : false | var c = a > b ? 1 : 0; |
流程控制语句
| Type | Detail | Desc |
|---|---|---|
| if … else … | if () { … } else if () { … } else { … } | |
| switch | switch (){ case x1: … case x2: … } | 可以接受任意的原始数据类型 |
| while | while () { … } | 只有一个判断条件,条件满足,就不断循环 |
| do … while | do { … } while (); | 在每次循环完成的时候判断条件 |
| for | for(var i=1; i<=100; i++){ … } | 已知循环的初始和结束条件时非常有用 |