JavaScript 基础
作者:互联网
文章目录
1 基础知识
1.1 变量、数据类型
1.1.1 变量
-
基本例子
var lastname="Doe", age=30, job="carpenter";
-
一条语句中声明的多个变量不可以同时赋同一个值
var x,y,z=1; //其中 x, y 为 undefined, z 为 1
-
ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const。const 定义常量与使用 let 定义的变量相似:二者都是块级作用域。
-
let 声明的变量只在 let 命令所在的代码块内有效
例子:
var i = 5; for (var i = 0; i < 10; i++) { // 一些代码... } // 这里输出 i 为 10
let i = 5; for (let i = 0; i < 10; i++) { // 一些代码... } // 这里输出 i 为 5
-
const 声明一个只读的常量,一旦声明,常量的值就不能改变
例子:
const PI = 3.141592653589793; PI = 3.14; // 报错 PI = PI + 10; // 报错
-
-
JavaScript 中,var 关键字定义的变量可以在使用后声明,也就是变量可以先使用再声明(变量提升)。let, const 关键字定义的变量则不可以在使用后声明,也就是变量需要先声明再使用。
例子:
// 在这里可以使用 carName1 变量 var carName1; // 在这里不可以使用 carName2 变量 let carName2; // 在这里不可以使用 carName3 变量 const carName3 = "Volvo";
1.1.2 数据类型
-
值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。
例子:
var carname="Volvo XC60"; var x1=34.00; //JavaScript 只有一种数字类型。数字可以带小数点,也可以不带 var x=true;
-
引用数据类型:对象(Object)、数组(Array)、函数(Function)。
对象由花括号分隔。在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义。属性由逗号分隔。
对象例子:
var person = { firstName: "John", lastName : "Doe", id : 5566, fullName : function() //对象的方法 { return this.firstName + " " + this.lastName; } }; //对象属性有两种寻址方式,如下所示 name=person.lastname; name=person["lastname"];
数组例子:
var cars=new Array(); //等价于var cars=new Array; cars[0]="Saab"; cars[1]="Volvo"; cars[2]="BMW"; //condensed array var cars=new Array("Saab","Volvo","BMW"); //literal array var cars=["Saab","Volvo","BMW"];
1.2 运算与比较
1.2.1 运算
大部分同C/C++。
- 5 / 2 = 2.5
- 支持字符串的"+"
1.2.2 比较
大部分同C/C++,也支持条件运算符。
运算符 | 描述 |
---|---|
== | 等于 |
=== | 绝对等于(值和类型均相等) |
!= | 不等于 |
!== | 不绝对等于(值和类型有一个不相等,或两个都不相等) |
1.3 条件、循环
1.3.1 if
if (time<10)
{
document.write("<b>早上好</b>");
}
else if (time>=10 && time<20)
{
document.write("<b>今天好</b>");
}
else
{
document.write("<b>晚上好!</b>");
}
1.3.2 switch
var d=new Date().getDay();
switch (d)
{
case 6:x="今天是星期六";
break;
case 0:x="今天是星期日";
break;
default:
x="期待周末";
}
document.getElementById("demo").innerHTML=x;
1.3.3 for循环
例子1:
for (var i=0;i<cars.length;i++)
{
document.write(cars[i] + "<br>");
}
例子2:
var person={fname:"Bill",lname:"Gates",age:56};
for (x in person) // x 为属性名
{
txt=txt + person[x];
}
1.3.4 while
例子1:
while (i<5)
{
x=x + "The number is " + i + "<br>";
i++;
}
例子2:
do
{
x=x + "The number is " + i + "<br>";
i++;
}
while (i<5);
1.3.5 break、continue
-
break 语句用于跳出循环
-
continue 用于跳过循环中的一个迭代
-
continue 语句(带有或不带标签引用)只能用在循环中;break 语句(不带标签引用),只能用在循环或 switch 中;通过标签引用,break 语句可用于跳出任何 JavaScript 代码块
例子:
cars=["BMW","Volvo","Saab","Ford"]; list: { document.write(cars[0] + "<br>"); document.write(cars[1] + "<br>"); document.write(cars[2] + "<br>"); break list; document.write(cars[3] + "<br>"); document.write(cars[4] + "<br>"); document.write(cars[5] + "<br>"); }
1.4 函数
1.4.1 函数定义
-
函数声明:
分号是用来分隔可执行JavaScript语句。 函数声明不以分号结束,因为它不是一个可执行语句。
function myFunction(a, b) { return a * b; }
-
函数表达式
匿名函数存储在变量中,不需要函数名称,通常通过变量名来调用。 匿名函数以分号结尾,因为它是一个执行语句。
var x = function (a, b) {return a * b}; var z = x(4, 3);
-
JavaScript 函数构造器
不推荐。在 JavaScript 中,很多时候,需要避免使用 new 关键字。
var myFunction = new Function("a", "b", "return a * b"); var x = myFunction(4, 3);
-
函数提升
提升应用在变量的声明与函数的声明。因此,函数可以在声明之前调用。使用表达式定义函数时无法提升。
-
自调用函数
如果表达式后面紧跟 () ,则会自动调用。不能自调用声明的函数。
(function () { var x = "Hello!!"; // 我将调用自己 })(); // 通过添加括号,来说明它是一个函数表达式
以上函数实际上是一个匿名自我调用的函数 (没有函数名)。
-
箭头函数
有的箭头函数都没有自己的 this,故不适合定义一个对象的方法。箭头函数是不能提升的,所以需要在使用之前定义。
// ES5 var x = function(x, y) { return x * y; } // ES6 const x = (x, y) => x * y;
1.4.2 函数参数
JavaScript 函数对参数的值没有进行任何的检查。ES5 中如果函数在调用时未提供隐式参数,参数会默认设置为: undefined。ES6 支持函数带有默认参数。
-
显式参数——类似于C语言中的形参
-
隐式参数——类似于C语言中的实参
-
如果函数调用时设置了过多的参数,参数将无法被引用,因为无法找到对应的参数名。 只能使用 arguments 对象来调用。JavaScript 函数有个内置的对象 arguments 对象,argument 对象包含了函数调用的参数数组。
x = findMax(1, 123, 500, 115, 44, 88); function findMax() { //利用 arguments 对象可以很方便地找到最大的一个参数的值 var i, max = arguments[0]; if(arguments.length < 2) return max; for (i = 0; i < arguments.length; i++) { if (arguments[i] > max) { max = arguments[i]; } } return max; }
-
传值
隐式参数的改变在函数外是不可见的。
-
传引用
在JavaScript中,可以引用对象的值。因此我们在函数内部修改对象的属性就会修改其初始的值。
修改对象属性在函数外是可见的。
1.4.3 函数调用
JavaScript 函数有 4 种调用方式,每种方式的不同在于 this 的初始化。一般而言,在Javascript中,this指向函数执行时的当前对象。
-
普通调用(当函数没有被自身的对象调用时 this 的值就会变成全局对象)
function myFunction(a, b) { return a * b; } //在浏览器中的页面对象是浏览器窗口(window 对象)。以上函数会自动变为 window 对象的函数。 //故myFunction() 和 window.myFunction() 是一样的 myFunction(10, 2); window.myFunction(10, 2);
function myFunction() { return this; } myFunction(); // 返回 window 对象
-
函数作为方法调用(函数作为对象方法调用,会使得 this 的值成为对象本身)
var myObject = { firstName:"John", lastName: "Doe", fullName: function () { return this; } } myObject.fullName(); // 返回所有者对象
-
使用构造函数调用函数
构造函数的调用会创建一个新的对象。新对象会继承构造函数的属性和方法。构造函数中 this 关键字没有任何的值,this 的值在函数调用实例化对象(new object)时创建。
// 构造函数: function myFunction(arg1, arg2) { this.firstName = arg1; this.lastName = arg2; } // This creates a new object var x = new myFunction("John","Doe"); x.firstName; // 返回 "John"
-
作为函数方法调用函数
在 JavaScript 中, 函数是对象。JavaScript 函数有它的属性和方法。call() 和 apply() 是预定义的函数方法。 两个方法可用于调用函数,两个方法的第一个参数必须是对象本身。apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
function myFunction(a, b) { return a * b; } myObject = myFunction.call(myObject, 10, 2); // 返回 20 myArray = [10, 2]; myObject = myFunction.apply(myObject, myArray); // 返回 20
1.4.4 闭包
私有变量可以用到闭包。
-
计数器困境
var counter = 0; function add() { return counter += 1; } add(); add(); add(); // 计数器现在为 3
问题:页面上的任何脚本都能改变计数器,即便没有调用 add() 函数。
-
解决办法
var add = (function () { var counter = 0; return function () {return counter += 1;} })(); add(); add(); add(); // 计数器为 3
- 自我调用函数只执行一次。设置计数器为 0。并返回函数表达式。add变量可以作为一个函数使用。非常棒的部分是它可以访问函数上一层作用域的计数器。这个叫作 JavaScript 闭包,它使得函数拥有私有变量变成可能。
- 计数器受匿名函数的作用域保护,只能通过 add 方法修改。
- 闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不受外界干扰。直观的说就是形成一个不销毁的栈环境。
1.5 其他
1.5.1 注释
- 单行注释以 // 开头。
- 多行注释以 /* 开始,以 */ 结尾。
1.5.2 throw、try、catch
-
try 语句测试代码块的错误
-
catch 语句处理错误
-
throw 语句创建自定义错误,抛出的异常可以是 JavaScript 字符串、数字、逻辑值或对象
-
finally 语句在 try 和 catch 语句之后,无论是否有触发异常,该语句都会执行
基本例子:
function myFunction() {
var message, x;
message = document.getElementById("p01");
message.innerHTML = "";
x = document.getElementById("demo").value;
try {
if(x == "") throw "值是空的";
if(isNaN(x)) throw "值不是一个数字";
x = Number(x);
if(x > 10) throw "太大";
if(x < 5) throw "太小";
}
catch(err) {
message.innerHTML = "错误: " + err + ".";
}
finally {
document.getElementById("demo").value = "";
}
}
1.5.3 null、undefined
-
可以设置为 null 来清空对象
-
任何变量都可以通过设置值为 undefined 来清空,类型为 undefined
-
typeof [1,2,3,4] // 返回 object
-
null 和 undefined 的值相等,但类型不等
typeof undefined // undefined typeof null // object null === undefined // false null == undefined // true
标签:myFunction,函数,对象,cars,JavaScript,基础,var 来源: https://blog.csdn.net/qq_43342381/article/details/118459070