1.js的输出
*使用windows.alert() 写入警告框
*使用document.write() 写入HTML输出
*使用innerHTML 写入元素、更改HTML元素的常用方法
如需访问HTML元素,js应使用document.getElementById(id)方法,id属性定义HTML元素
*使用console.log() 写入浏览器控制台
2.js语句
构成:值;运算符;表达式;关键字;注释
分号分隔语句,有分号分割的前提下允许一行写多条语句
js关键字:
break 终止 switch 或循环。
continue 跳出循环并在顶端开始。
debugger 停止执行 JavaScript,并调用调试函数(如果可用)。
do ... while 执行语句块,并在条件为真时重复代码块。
for 标记需被执行的语句块,只要条件为真。
function 声明函数。
if ... else 标记需被执行的语句块,根据某个条件。
return 退出函数。
switch 标记需被执行的语句块,根据不同的情况。
try ... catch 对语句块实现错误处理。
var 声明变量。
3.js语法
js值:分为变量值和混合值
js变量:var声明变量 =号 用于变量赋值
js运算符:+ - * /
js表达式:由值、变量 和 运算符 组合,计算结果为值
js注释:单行:// 多行(文档):/* */
js标识符:即名称
**js对大小写敏感
**驼峰式命名不能用连字符,连字符是为减法预留的
##let
1.提供块作用域(变量、常量)的两个关键字 let 和 const
*全局作用域
在函数之外,全局声明的变量拥有全局作用域,可以在js任何位置访问
*函数作用域
函数内局部声明的变量拥有函数作用域,局部变量只能在被声明的变量内访问
2.js块作用域
通过var关键字声明的变量没有块作用域;在{ }内声明的变量可以在块之外访问
*在ES2015之前,js没有块作用域。使用let关键字声明拥有块作用域的变量,在{ }内声明块外部无法访问
*变量在块中声明,不同于在块之外声明的 变量
3.重新声明变量
使用var关键字重新声明变量,若在块中重新声明变量那么块外也会被重新声明
*let可以解决var块内重新声明变量影响块外变量的问题,let在块中重新声明变量不会影响块外的变量
4.循环作用域
var i = 7;
for (var i = 0; i < 10; i++) {
// 一些语句
}
// 此处,i 为 10
let i = 7;
for (let i = 0; i < 10; i++) {
// 一些语句
}
// 此处 i 为 7
*在循环中用 let 声明了变量 i,那么只有在循环内,变量 i 才是可见的。
5.HTML中的全局变量
*在使用js的情况下,全局作用域是js环境
var carName = "porsche";
// 此处的代码可使用 window.carName
*在HTML中,全局作用域是Window对象
*由var关键字定义的全局变量属于Window对象
6.重新声明
*在相同作用域(块)中用不同关键字声明同一变量是不被允许的
*在不同作用域(块)中用不同关键字声明同一变量是被允许的,本质是两个变量
7.“提升”Hoisting
提升(Hoisting)是 JavaScript 将声明移至顶部的默认行为。换句话说就是对象还没有声明之前就可以使用它
##const
通过const定义的变量与let类似但是不能重新赋值
const PI = 3.141592653589793;
PI = 3.14; // 会出错
PI = PI + 10; // 也会出错
1.块作用域
与let块作用域相似。变量 在块中声明,不同于在块之外声明的 变量。
2.在声明时赋值
变量必须在声明时赋值
eg:
const PI = 3.141592653589793;
3.不是真正的常数
没有定义常量值,但定义了对值的常量引用,可以更改常量对象的属性,但无法重新为常量数组赋值
eg:
// 您可以创建 const 对象:
const car = {type:"porsche", model:"911", color:"Black"};
cars = ["Honda", "Toyota", "Volvo"]; // ERROR
// 您可以更改属性:
car.color = "White";
// 您可以添加属性:
car.owner = "Bill";
4.重新声明
在同一作用域(块)中不允许已有var或let变量重新声明或者重新赋值给const,其他位置与let、var类似
5.提升 Hoisting
通过 const 定义的变量不会被提升到顶端。const 变量不能在声明之前使用
##JS运算符
*算术运算符
+
-
*
/
% (取余)
++ (递加)
-- (递减)
*赋值给运算符
=
+=
-=
*=
/=
%=
*字符串运算符
在用于字符串时,+ 运算符被称为级联运算符。
eg:
txt1 = "Bill";
txt2 = "Gates";
txt3 = txt1 + " " + txt2;
结果:Bill Gates
*相加两个数字,将返回和,但对一个数字和一个字符串相加将返回一个字符串
eg:
x = 7 + 8;
y = "7" + 8;
z = "Hello" + 7;
结果:
15
78
Hello7
*JS比较运算符
== 等于
=== 等值等型
!= 不相等
!== 不等值或不等型
> 大于
< 小于
>= 大于或等于
<= 小于或等于
? 三元运算符
*JS逻辑运算符
&& 逻辑与
|| 逻辑或
! 逻辑非
*JS类型运算符
typeof 返回变量的类型。
instanceof 返回 true,如果对象是对象类型的实例
##JS数据类型
*Undefined与Null的区别:值相等,数据类型不等
eg:
typeof undefined // undefined
typeof null // object
null === undefined // false
null == undefined // true
*原始数据
typeof 运算符可返回以下原始类型之一:
string
number
boolean
undefined
实例
typeof "Bill" // 返回 "string"
typeof 3.14 // 返回 "number"
typeof true // 返回 "boolean"
typeof false // 返回 "boolean"
typeof x // 返回 "undefined" (假如 x 没有值)
*复杂数据
typeof 运算符可返回以下两种类型之一:
function
object
typeof 运算符把对象、数组或 null 返回 object。
typeof 运算符把数组返回为 "object",因为在 JavaScript 中数组即对象。
typeof 运算符不会把函数返回 object。
实例
typeof {name:'Bill', age:62} // 返回 "object"
typeof [1,2,3,4] // 返回 "object" (并非 "array")
typeof null // 返回 "object"
typeof function myFunc(){} // 返回 "function"
##JS函数
*执行特定任务的代码块
*JS函数会在某一代码块调用它时被执行
*JS函数语法
函数名可包含字母、数字、下划线和美元符号(规则与变量名相同)。
圆括号内可包括由逗号分隔的参数
语法格式:
function 函数名(参数1,参数2,参数3.........){
要执行的代码
}
*函数调用
函数中的代码将在其他代码调用该函数时执行:
当事件发生时(当用户点击按钮时)
当 JavaScript 代码调用时
自动的(自调用)
*JS字符串方法
length 字符串长度
indexof( , ) 查找字符串中的字符串 未找到返回-1 若有两个参数,则第二个参数为检索的起始位置
lastIndexof( , ) 指定文本在字符串中最后一次出现的索引(位置) 未找到返回-1 若有两个参数,则第二个参数为检索的起始位置
search( ) 搜索特定字符串,返回比配的位置
**indexof( )和search( )是相等的。但是search( )方法无法设置第二个检索位置参数;indexof( )无法设置更强大的搜索值(正则表达式)
*提取部分字符串的方法
slice(start, end)
起始索引位置,终止索引位置,参数为负值从结尾计数
substring(start, end)
与slice()类似,但substring( )不接受索引参数为负值
substr( start, length)
起始索引位置,提取部分长度(不能为负值)
replace( ,) 第一个参数是要被替换的字符串,第二个参数是替换后的新字符串。替换字符串内容;不会改变调用它的字符串,返回的是新字符串
toUpperCase( ) 将字符串转为大写
toLowCase( ) 将字符串转为小写
concat( ) 连接两个或多个字符串
eg:
var text1 = "Hello";
var text2 = "World";
text3 = text1.concat(" ",text2);
结果:Hello World
String.trim( ) 方法删除字符串两端的空白符
*提取字符串字符
charAt( )方法 返回的是字符串中指定下标位置的字符串
charCodeAt( )方法 返回的是字符串中指定位置的Unicode编码
*把字符串转换为数组
split( )