1. JavaScript 作用域
在JS中, 对象和函数同样也是变量。
JavaScript 局部作用域/全局作用域
- 局部变量:在函数中通过var声明的变量。
函数参数只在函数内起作用,是局部变量。 - 全局变量:在函数外通过var声明的变量。
在 HTML 中, 全局变量是 window 对象: 所有数据变量都属于 window 对象。 - 没有声明就使用的变量,默认为全局变量,不论这个变量在哪被使用。
function func(){
undefined_var=110
}
在 func() 被第一次调用之前, undefined_var 变量是不存在的即 undefined。func() 被调用过之后,undefined_var 成为全局变量。
JavaScript 变量生命周期
JavaScript 变量生命周期在它声明时初始化。
let 和 var 的区别代码实例:
function varTest() {
var x = 1;
if (true) {
var x = 2; // 同样的变量!
console.log(x); // 2
}
console.log(x); // 2
}
function letTest() {
let x = 1;
if (true) {
let x = 2; // 不同的变量
console.log(x); // 2
}
console.log(x); // 1
}
2. JavaScript 事件JavaScript 字符串
HTML 事件
HTML 元素中可以添加事件属性,使用 JavaScript 代码来添加 HTML 元素。
<some-HTML-element some-event="JavaScript 代码">
在以下实例中,按钮元素中添加了 onclick 属性 (并加上代码):
<button onclick="getElementById("demo").innerHTML=Date()">Time is</button>
在以下实例中,代码将修改自身元素的内容 (使用 this.innerHTML):
<button onclick="this.innerHTML=Date()">Time is</button>
不推荐使用"HTML 元素中可以添加事件属性"的方式来添加属性。
因为遵从“高内聚,低耦合”的编程原则。高内聚是说模块内部要高度聚合,低耦合是说模块与模块之间的藕合度要尽量低。前者是说模块内部的关系,后者是说模块与模块间的关系。
常见的HTML事件
onclick:用户点击 HTML 元素
onmouseover:用户在一个HTML元素上移动鼠标
onmouseout:用户从一个HTML元素上移开鼠标
onkeydown:用户按下键盘按键
参考:HTML DOM 事件
3. JavaScript 字符串JavaScript 运算符
var x = "JohnJohn"; // x 是字符串
y = x.charAt(2); // h
y = x.charCodeAt(2); // 104
y = x.concat(y, y); // JohnJohn104104, x+y+y
y = x.indexOf('h'); // 2, 索引从0开始
y = x.lastIndexOf('h'); // 6
y = x.slice();
y = x.split('o'); //J,hnJ,hn
y = x.substr(2); // hnJohn
y = x.substring(2,4) // hn,[2,3]
y = x.toLocaleLowerCase(); // johnjohn,小写
y = x.toLocaleUpperCase(); // JOHNJOHN,大写
y = x.toString(); // 转成Stirng
y = x.toUpperCase(); // JOHNJOHN,大写
y = x.trim(); // JohnJohn,去除两端的空格
y = x.valueOf(); // 返回某个字符串对象的原始值
4. JavaScript 运算符
JavaScript 算术运算符
++自增;–自减
JavaScript 赋值运算符
x+=y --> x=x+y
x-=y --> x=x-y
x*=y --> x=x*y
x/=y --> x=x/y
空文本 + 数字得到的运算结果都是把数字转成字符串。
var result1 = 5+5+"abc"; //结果将是"10abc"
var result2= ""+5+5+"abc"; //结果将是"55abc"
常见的不同类型运算的转换方式
(1).字符串和数字相加,数字转成字符串。
var one="This is a test";
var two=123;
var three=one+two;
// 结果:three:This is a test123
(2). 字符串与 null(空值) 相加,null 转化为字符串。
var car=null+"a"; // 结果为 nulla
(3).字符串与布尔值相加,布尔值转化成字符串。
(4).数字和布尔值相加,布尔值 false 转成 0,true 转成 1。
var one=13;
var two=true;
var three=one+two;
// 结果 three:14
(5).数字与 null(空值) 相加,null 转化为数字 0。
var car=null+3+4; // 结果为7
5. JavaScript 比较 和 逻辑运算符
比较运算符
在逻辑语句中使用,以测定变量或值是否相等。用于条件语句。
等于==
绝对等于===(数据类型和值)
不等于!=
不绝对等于!===
逻辑运算符
&& and;
|| or;
!not
条件运算符
variablename=(condition)?value1:value2
6. JavaScript 条件语句
if 语句
if (condition)
{
当条件为 true 时执行的代码
}
if…else 语句
if (condition)
{
当条件为 true 时执行的代码
}
else
{
当条件不为 true 时执行的代码
}
if…else if…else 语句
if (condition1)
{
当条件 1 为 true 时执行的代码
}
else if (condition2)
{
当条件 2 为 true 时执行的代码
}
else
{
当条件 1 和 条件 2 都不为 true 时执行的代码
}
7. JavaScript switch 语句
var d=new Date().getDay();
switch (d)
{
case 0:x="今天是星期日";
break;
case 1:x="今天是星期一";
break;
case 2:x="今天是星期二";
break;
case 3:x="今天是星期三";
break;
case 4:x="今天是星期四";
break;
case 5:x="今天是星期五";
break;
case 6:x="今天是星期六";
break;
}
default 关键词
var d=new Date().getDay();
switch (d)
{
case 6:x="今天是星期六";
break;
case 0:x="今天是星期日";
break;
default:
x="期待周末";
}
document.getElementById("demo").innerHTML=x;
switch 中 case的判断是===的判断,即数据类型和值的双重判断。
8. JavaScript for 循环
不同类型的循环
for - 循环代码块一定的次数
for/in - 循环遍历对象的属性
while - 当指定的条件为 true 时循环指定的代码块
do/while - 同样当指定的条件为 true 时循环指定的代码块
For 循环
for (语句 1; 语句 2; 语句 3)
{
被执行的代码块
}
语句 1 (代码块)开始前执行
语句 2 定义运行循环(代码块)的条件
语句 3 在循环(代码块)已被执行之后执行
- 语句1:在循环开始前已经设置了值时可以省略语句1
var i=2,len=cars.length;
for (; i<len; i++)
{
document.write(cars[i] + "<br>");
}
- 语句2:如果语句 2 返回 true,则循环再次开始,如果返回 false,则循环将结束。
如果您省略了语句 2,那么必须在循环内提供 break。 - 语句3:通常语句 3 会增加初始变量的值。
当循环内部有相应的代码时语句 3 也可以省略。