JavaScript概述
Javascript包括三部分:
- ECMAScript核心,提供核心语言功能.
- DOM文档对象模型, 提供访问和操作网页内容的方法和接口.
- BOM浏览器对象模型, 提供与浏览器交互的方法和接口.
ES5.0 (2009) ES5.1 (2011, ISO/IEC) ES6.0 (2015)
javascript基本语法
javascript源程序叫xxx.js.
javascript大小写敏感.
javascript使用驼峰命名法.
javascript的标识符以字母,下划线或美元符号开头,还可以包含数字.不能是关键字.
JvaScript代码块以大括号{}包围,开括号写在第一行结尾处,前面空格,闭括号单独一行。
javascript中所有事物都是对象,都有属性和方法.
JavaScript使用分号;表示一个语句结束, 一般一行写多个语句才需要显示添加分号.
javascript中运算符周围要有空格。
javascript中使用四个空格来缩进。
注释
单行注释:
// comment
多行注释:
/*
* comment1
* comment2
*/
关键字
# 数据类型
var function return typeof new delete
# 流程控制
if else for in do while switch case default with break continue
# 修饰符
void
# 动作相关
instanceof this
# 异常处理
try catch throw
# 调试
debugger
# ECMAScript2015
let const
运算符和优先级
算数运算符
+
-
*
**
/
%
++
--
赋值运算符
=
+=
-=
*=
/=
%=
<<=
>>=
>>>=
&=
^=
|=
**=
比较运算符
// 在比较值钱进行类型转换.
==
// 强制对值和类型进行比较.
===
!=
!==
>
<
>=
<=
// 三元运算符
?
逻辑运算符
// 逻辑与
&&
// 逻辑或
||
// 逻辑非
!
类型运算符
typeof
instanceof
位运算符
&
|
~
^
<<
>>
>>>
数据类型
var申明变量
通过var申明的变量没有块作用域,在块之外也能访问.
申明变量:
重复申明同名变量不会改变变量的值.
var varName;
// 一次申明多个变量
var varName1, varName2, ...;
赋值:
varName = varValue;
申明并赋值:
动态类型语言,变量可以赋予不同类型值.
var varName = varValue;
// 一次定义多个变量
var varName1 = varValue1, varName2=varValue2, ...;
申明变量类型:
var varName = new Boolean/Number/String/Array/Object;
let申明变量
通过let申明有块作用域的变量.
{
let varName = varValue;
}
const申明常量
const定义的变量与let相似, 但不能重新赋值.
它没有定义常量值。它定义了对值的常量引用。
{
const varName = varValue;
}
常量对象的属性可以修改:
const car = {type:"porsche", model:"911", color:"black"};
car.color = "white";
常量数组元素可以修改:
const cars = ["audi", "bmw"];
cars[0] = "honda";
布尔/Boolean
布尔类型只有true和false两个值.
var x = true
var y = false
数字/Number
var name = 1.3
字符串/String
字符串可以用单引号或双引号表示.
var name = "string"
Null
Null类型只有一个特殊值null.表示一个空对象指针.
通过null清空变量的值.
varName = null
Undefined
没有赋值的变量值为undefined.
Undefined类型只有一个特殊值undefined.
对象/Object
对象由大括号包围的键值对表示,中间用逗号隔开.
定义对象:
var obj = new Object;
var obj = {key: "val", key1: "val1"};
var obj = {
firstName: "bill", // 冒号后空格.
lastName: "gates" // 最后一个不要都好.
};
访问对象属性:
val = obj.key
val = obj["key"]
访问对象方法:
obj.method()
typeof
该操作符可以返回数据类型:
undefined
boolean
number
string
object
function
控制流
if
if (condition) {
expression;
}
if (condition) {
expression;
} else {
expression;
}
if (condition) {
expression;
} else if (condition) {
expression;
} else {
expression;
}
switch
switch(expression) {
case value:
statement;
break;
case value:
statement;
break;
...
default:
statement;
}
for
for:
for (initialization; expression; post-loop-expression) {
statement;
}
for-in:
循环遍历对象的属性
for (property in object) {
statement;
}
while
do-while:
do {
statement;
} while (condition);
while:
while (condition) {
statement;
}
with
将代码作用于设定到一个特定对象.
with (expression) {
statement;
}
break和continue
label:
break和continue都可以和label配合使用.
labelName: statement
break:
跳出循环(for, while).
labelName:
for () {
for () {
if () {
break labelName; # 跳出最外层循环
}
}
}
continue:
继续下一次循环.
labelName:
for () {
for () {
if () {
continue labelName; # 从外层循环继续循环
}
}
}
文件和输入输出
输出
alert写入警告框:
window.alert(10);
write写入html:
document.write(10);
innerHTML写入html:
document.getElementById("demo").innerHTML = 10;
console.log写入浏览器控制台:
// 可以在js代码或调试窗口打印变量值:
console.log(10);
函数
定义函数:
// 没参数
function funcName() {
}
// 带参数
function funcName(args) {
}
// 使用变量
var name = function(args) {};
// 使用构造方法
var name = new Function(args, return value);
函数返回值:
function funcName() {
return ...
}
// 函数返回值赋值给变量
var value = funcName()
js的函数形式参数和实际参数可以是任意个数和任意类型.
函数内部定义的变量是局部变量,局部变量在函数运行后被删除.
如果把值赋给未申明的变量,该变量被自动作为全局变量.
name = "value" 相当于全局变量
函数内部属性:
函数内部两个特殊对象arguments和this.
arguments // 用来存储该函数的所有参数
arguments.callee // 指针,指向该函数本身.
this // 表示函数调用语句所处的作用域
window // 当在全局调用this,引用的就是window对象.
// 调用函数
apply()
call()
错误和异常
try-catch:
try {
statement;
} catch(err) {
statement;
}
throw:
throw exception
严格模式
通过在脚本或函数开头添加严格模式:
严格模式在不声明变量的情况下使用变量,是不允许的
"use strict";
......
debugger调试
debugger关键字会停止js的执行,如果有调试函数就调用。
如果调试器打开,会在debugger停止执行,如果没有打开调试器,会继续运行。
var x = 10;
debugger;
document.getElementbyId("demo").innerHTML = x;
模块和包
文档
JSX
JSX 是 JavaScript 语法扩展,可以让你在 JavaScript 文件中书写类似 HTML 的标签。虽然还有其它方式可以编写组件,但大部分 React 开发者更喜欢 JSX 的简洁性,并且在大部分代码库中使用它。