JavaScript基本概述
JavaScript(以下简称JS)是一种弱语言,区分大小写,用于响应web行为的编程语言。
JavaScript的使用方法有3种,和css样式使用的方式相同
- 直接在HTML标签中写明
- 使用
<script>
标签 - 引用外部JS文件
JS的数据类型:
数据类型 | 例子 |
---|---|
数字 | 1,1.2 |
字符串 | “zifuchuan”,’字符串’ |
布尔值 | true,false |
null | null |
undefined | undefined |
对象 | object(另说) |
JS的算术运算:
算术运算 | 描述 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
% | 取余 |
Math | Math对象中包含了许多公式 |
变量的作用域:
全局变量变量拥有全局作用域,而局部变量只能在声明的区域内有作用。
var scope="global"; //声明一个全局变量
function checkscope(){
var scope="local"; //声明一个局部变量
return scope; //返回局部变量的值,而不是全局变量的值
}
checkscope(); //=>local
函数作用域和声明提前:
JS的函数作用域是指在函数内声明的所有变量在函数体内始终课件的。这意味着变量在声明之前甚至可以使用。这种特性被称为声明提前(hoisting)。
var scope="global";
function f(){
console.log(scope); //输出"undefined",而不是"global"
var scope="local"; //变量在这里赋初始值,但是变量本身在函数体内的任何地方均有定义的
console.log(scope); //输出"local"
}
上面的函数可以等价于下面的函数,这样更容易理解。
var scope="global";
function f(){
var scope; //在函数顶部声明了局部变量
console.log(scope); //变量存在,值是"undefined"
scope="local"; //变量初始化赋值
console.log(scope); //有了所期望的值
自增或自减的运算顺序:
自增放在前面是先自加后再使用number,
自增放在后面是先使用number后再自加。
function test(){
var number=0;
console.log(number++); //结果为0
console.log(number); //结果为1
console.log(++number); //结果为2
console.log(number); //结果为2
}
test();
条件语句:
if语句:
if(判断条件){
//符合条件,执行内容
}else if(判断条件){
// 符合另一条件,执行内容
}else{
// 不符合上述条件,执行内容
}
其中注意的是如果在某个执行内容中加入return(后面不带返回值),将直接结束if语句。
var number=5;
function test(number){
if(number==5){
number++;
console.log(number); //输出5
return; //直接结束if语句
number+=number; //由于return了,所以后面的语句是不会执行的
console.log(number);
}
}
test(number);
switch语句:
switch(expression要进行比较的值) {
case n比较值:
//代码块
break;
case m比较值:
// 代码块
break;
default:
//默认代码块
}
循环语句:
常见的循环语句有两种,for和while。
for (语句 1; 语句 2; 语句 3)
{
//被执行的代码块
}
//语句 1 (代码块)开始前执行 starts.
//语句 2 定义运行循环(代码块)的条件
//语句 3 在循环(代码块)已被执行之后执行
while (条件)
{
//需要执行的代码
}
在循环中值得注意的是有两个关键字,break和continue。
for (var i = 0; i < 10; i++) {
if (i == 3) {
break; //在i等于3的时候,实现if语句,执行break,整个循环结束
}
console.log(i); //最后输出只有0 1 2
}
for (var i = 0; i < 10; i++) {
if (i == 3) {
continue; //在i等于3的时候,实现if语句,执行continue,本次循环结束,进入下次循环
}
console.log(i); //最后输出有0 1 2 4 5 6 7 8 9,除了3
}
对象object:
创建对象的方法:
var empty={}; //没有任何属性的对象
var point={x:0,y:0}; //两个属性
var book={
"main title":"JS", //属性名字中有空格,必须用字符串表示
"sub-title":"The js", //属性名字中有连字符,必须用字符串表示
"for":"all js", //"for"是保留字,必须用引号
author:"js"
text:function (){code lines} //方法
};
var obj=new Object(); //使用new关键字
使用点语法来引用对象中的属性和方法,
数字的点语法需要点2个
比如4..rofix(2);
还一种方法是结合[]来访问属性
比如4["number"]
构造函数和this关键字:
上述通过new关键字来创建对象,而对象我们可以自己创建,这里就有构造函数这个东西来创建对象。
function User(name,pwd){
this.name=name;
this.pwd=pwd;
this.show=function(){
console.log(name+":"+pwd);
}
}
var user=new User("zhangsan","333");
console.dir(user);
创建构造函数的时候要注意的是,构造函数的首字母要大写(一般默认),用于区分构造函数和普通函数。
创建好后,则通过new关键字就可以创建对象了。
其中this关键字起到对象指引的作用,在函数中,this就是指代函数本身的对象。
this关键字
-this是一个特殊变量
-默认情况下this指向全局对象(window)
-在对象中this指向对象本身
-JavaScript有三种方法可以改变this的指向:call,apply,bind
在上述创建的构造函数在每次创建新对象时,其中的函数一起被创建了,但是看函数的不需要一起被复制,于是引入prototype(原型)。
User.prototype.show=function(){console.log(name+":"+pwd);}
每一个对象都有一个prototype(原型)属性,可以使这个函数共用。
使用call, apply,bind方法可以改变函数执行的对象。
function f(x, y) {
console.log(this.a);
console.log(x + y) ;
}
var g = {
a: "hello"
};
f.call(g, 1, 2); //输出hello 3
f.apply(g, [1, 2]); //输出hello 3,后面的参数需要以数组的方式来传入
var h=f.bind(g); //输出undefined,先指定对象,在后面新的函数中在调用这个对象
h(1, 2); //输出hello 3 h函数由于在上面bind指明了对象,所以h函数的对象就是
//bind指明的对象g
本博客仅用于记录web前端学习情况