目录
一、概述
1.1 简介
- 语言简介:JavaScript 是 Web 的编程语言,所有现代的 HTML 页面都使用,遵循ES6规范
- 特点:
- 解释型语言:逐行执行,某行报错即退出,后续均不执行
- 书写:大小写敏感,会忽略多余的空格,字符串建议用
""
- 句尾分号:建议增加,否则浏览器自动加,有误加可能
- 功能:
- 能够改变所有HTML元素内容、属性、CSS 样式、对事件做出反应
- 在数据被提交到服务器之前验证数据
- 控制cookies,包括创建和修改等
1.2 调用方式
- 直接调用
<html> <head> <title>显示在浏览器标签上的名字</title> <!-- 1、引用调用:对当前文件的相对路径 --> <script src="demo.js" type="text/javascript"></script> <!-- 2、直接调用 --> <script type="text/javascript"> // 直接显示的页面上,即写入body标签内,DOM操作 document.write("在浏览器视窗内直接显示"); // 浏览器直接弹出弹窗,默认是windows的方法 alert("弹窗显示"); // 调试js常用,在debug时打印变量 // 控制台:在chrome浏览器页面右键单击,选检查,然后找console console.log("浏览器的控制台console显示,F12调出控制台"); </script> </head> <body> <!--这里写HTML页面内容,注意此注释与js注释写法不同--> </body> </html>
二、数据类型
2.1 基本数据类型
2.1.1 种类
- 列表
数据类型 定义写法 强制类型转换 字符串(String) let name = "Johnson";
String(obj)
或let name = obj + ""
数字(Number) let age= 1.6;
或let age= 123e-5
Number(obj)
布尔(Boolean) let isGood = true;
Boolean(obj)
未初始化的变量(undefined) let temp;
,未声明会报错空值(null) let a = null
,用于初始化时
不指定数据类型数字特殊转换:
- 整型:
let b = parseInt(pixel)
,精确针对let pixel = "123px";
,提取最左侧整数部分 - 浮点型:
let b = parseFloat(pixel)
,精确针对let pixel = "123.345px";
,提取最左侧浮点部分
- 整型:
2.1.2 类型转换
- 特例及布尔值
值 转字符串 转数字 布尔值 对象 undefined “undefined” NaN false TypeError null “null” 0 false TypeError true “true” 1 new Boolean(true)
- 字符串
值 转数字 布尔值 对象 “” 0 false new String(“”) “1.2” 1.2 true new String(“1.2”) “one” NaN true new String(“one”)
- 数字
值 转字符串 布尔值 对象 NaN “NaN” false new Number(NaN) Infinity “Infinity” true new Number(Infinity) 超界:界限为
Number.MAX_VALUE
,返回Infinity
或-Infinity
非数字(NaN
)- 产生:0/0,无穷/无穷,开方-1,数字减字符串(类似操作)
- 判断:
if(isNaN(x)){}
,或者if(isFinite(x)){}
,判断非Infinity&&非NaN
- 数字变量方法
方法 描述 用法 toString() 仅转为字符串 let num = 123.4;
则num.toString();
为123.4toFixed() 指定小数位数 let num = 123.4;
则num.toFixed(2);
为123.40toPrecision() 指定有效位数 let num = 123.4;
则num.toPrecision(6);
为123.400toExponential() 转换为指数计数法 let num = 123.4;
则num.toExponential();
为1.234e+2
2.2 对象类型
2.2.1 种类
- 对象:
let obj = {}
,继承自Object类,并继承Object.prototype属性、方法 - 示例
- 内置对象
数据类型 定义写法 原型对象 数组 let arr = [];
或let arr = new Array();
Array.prototype 函数 见下篇 日期 let date = new Date();
Date.prototype 正则表达式 let reg = new RegExp("js")
RegExp.prototype 原型属性继承:以上内置对象原型均继承自Object.prototype
对象可调用方法:可通过变量名.__proto__
或Object.getPrototypeOf(变量名)
查看当前对象可调用的方法、属性,可改写、新增 - 宿主对象:宿主环境(web浏览器)定义的,如HTMLElement对象
2.2.2 转换
- Array对象转换
值 转字符串 转数字 布尔值 [] “” 0 true [9] “9” 9 true [‘a’] 使用join方法 NaN true
三、运算符
- 运算符:同C语言,包括逻辑运算符
&&、||
及a++, ++a,+=, -=
- 判断运算符:
- ==/!=:若类型不同,先做
类型转换2.2节
,再比较,“1” == 1 为true - ===/!==:不做类型转换,直接比较,“1” === 1 为false
- 判断NaN:任何值都不等于NaN包括其自己,用
let res = isNaN(val);
判断
- ==/!=:若类型不同,先做
- 三目运算符:
let max = a >b ? a : b;
四、语句
4.1 常规语句
- if语句
// 单if语句,大括号内为语句块 if(n){ // 需要执行的语句块 } // if-else语句 if(n){ // 需要执行的语句块 }else{ } // 多if-else语句 if(n){ // 需要执行的语句块 }else if(m){ // 需要执行的语句块 }else{ // 需要执行的语句块 } // 逻辑与 之 “短路操作” // 实现if语句 n && m == 1 && run(); > 按顺序验证前两个式子,有一个false,则run函数就不执行
- switch语句
// n 可为数字,也可为表达式 switch(n) { // 若没break语句,则语句顺序执行每条语句,直到最后 // case后:可为数字,可为字符串,全等===判断 case 1: // 执行代码块 1 // break,continue都可在js中使用 break; case 2: // 执行代码块 2 break; default: // 执行代码块 余下 }
- while语句
// 常规while语句:n可为表达式,为false时跳出循环体 while (n) { //需要执行的代码 } // do-while语句:n可为表达式,为false时跳出循环体 do{ //需要执行的代码 }while (n)
- for语句
// 迭代数字 for (let i=0 ; i<word.length ; i++){ //被执行的代码块 } // 迭代读取数组 let obj=[1,true,'good'] for(let index in obj){ console.log(obj[index]) } // ES6语法obj可为: Arrays(数组), Strings(字符串), // Maps(映射), Sets(集合)等可迭代的数据结构等,item直接提取元素值 for (let item of obj){ //被执行的代码块 }
4.2 debug
- try语句
try { // 程序语句 } catch(e){ // e为Error对象 } finally{ // 不管try是否抛出异常,此处总会执行,用于对打开的对象关闭操作 }
- throw语句
throw "可以直接写字符串" throw new Error("抛出Error对象")