Javascript-基础-学习笔记

写在前面: 此博客记录自己学习Javascript学习笔记,如有侵权,联系删!
学习来源: 尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通)


Hello World

控制浏览器弹出一个警告框

alert("哥,你真帅啊!!");

让计算机在页面中输出一个内容
document.write()可以向body中输出一个内容

document.write("看我出不出来~~~");

向控制台输出一个内容
console.log()的作用是向控制台输出一个内容

console.log("你猜我在哪出来呢?");

JavaScript 编写位置

1、外部引入
可以将js代码编写到外部js文件中,然后通过script标签引入
写到外部文件中可以在不同的页面中同时引用,也可以利用到浏览器的缓存机制
推荐使用的方式

<script type="text/javascript" src="js/script.js"></script>

2、外部引入+内部编写
script标签一旦用于引入外部文件了,就不能在编写代码了,即使编写了浏览器也会忽略
如果需要则可以在创建一个新的script标签用于编写内部代码

<script type="text/javascript" src="js/script.js"></script>
<script type="text/javascript">
	alert("我是内部的JS代码");
</script>

3、放入html标签中
可以将js代码编写到标签的onclick属性中
当我们点击按钮时,js代码才会执行
虽然可以写在标签的属性中,但是他们属于结构与行为耦合,不方便维护,不推荐使用

<button onclick="alert('讨厌,你点我干嘛~~');">点我一下</button>

4、放入a标签的href属性
可以将js代码写在超链接的href属性中,这样当点击超链接时,会执行js代码

<a href="javascript:alert('让你点你就点!!');">你也点我一下</a>

基本语法

1、注释

  • 多行注释 - JS注释
    多行注释,注释中的内容不会被执行,但是可以在源代码中查看
    要养成良好的编写注释的习惯,也可以通过注释来对代码进行一些简单的调试
/*
*alert("hello");
*document.write("hello");
* 
*/
  • 单行注释
//alert("hello");
//document.write("hello");

2、语法

(1)、JS中严格区分大小写
(2)、JS中每一条语句以分号(;)结尾
  如果不写分号,浏览器会自动添加,但是会消耗一些系统资源,
  而且有些时候,浏览器会加错分号,所以在开发中分号必须写
(3)、JS中会忽略多个空格和换行,所以我们可以利用空格和换行对代码进行格式化

标识符

  • 在JS中所有的可以由我们自主命名的都可以称为是标识符
例如:变量名、函数名、属性名都属于标识符
  • 命名一个标识符时需要遵守如下规则
    1、标识符中可以含有字母、数字、_、$
    2、标识符不能以数字开头
    3、标识符不能是ES中的关键字或保留字
    4、标识符一般都采用驼峰命名法
       首字母小写,每个单词的开头字母大写,其余字母小写
      helloWorld xxxYyyZzz
  • JS底层保存标识符时实际上是采用的Unicode编码,
     所以理论上讲,所有的utf-8中含有的内容都可以作为标识符

千万不要这么用

var 锄禾日当午 = 789;
console.log(锄禾日当午);

数据类型

typeof操作符

数据类型指的就是字面量的类型,在JS中一共有六种数据类型

  • String字符串(基本数据类型)
  • Number数值(基本数据类型)
  • Boolean布尔值(基本数据类型)
  • Null空值(基本数据类型)
  • Undefined未定义(基本数据类型)
  • Object对象(引用数据类型)

其中StringNumberBooleanNullUndefined属于基本数据类型,而Object属于引用数据类型

typeof 操作符

可以使用一个运算符 typeof,来检查一个变量的类型
语法: typeof 变量

  • 检查字符串时,会返回string
  • 检查数值时,会返回number

String 类型

  • 在JS中字符串需要使用引号引起来
  • 使用双引号或单引号都可以,但是不要混着用
  • 引号不能嵌套,双引号不能放双引号,单引号不能放单引号
var str = 'hello';
str = '我说:"今天天气真不错!"';

在字符串中我们可以使用\作为转义字符:当表示一些特殊符号时可以使用\进行转义

  • \"表示"
  • \'表示 '
  • \n表示换行
  • \t表示制表符
  • \\表示\
str = "我说:\"今天\t天气真不错!\"";
str1 = "\\\\\\";
alert("str");//输出字面量 字符串str
alert(str);//输出变量str
alert(str1);//输出变量str1

var str2 = "hello";
str2 = "你好";
str2 = 3;
//输出变量str2
alert(str2);// 3

//alert("hello,你好");
//console.log("我就是不出来~~~");

Number 类型

在JS中所有的数值都是Number类型,包括整数和浮点数(小数)
JS中可以表示的数字的最大值

Number.MAX_VALUE //1.7976931348623157e+308

Number.MIN_VALUE大于0的最小值

Number.MIN_VALUE//5e-324

如果使用Number表示的数字超过了最大值,则会返回一个Infinity

  • Infinity 表示正无穷
  • -Infinity 表示负无穷
  • 使用typeof检查Infinity也会返回number
console.log(Number.MAX_VALUE * Number.MAX_VALUE);// Infinity
console.log(-Number.MAX_VALUE * Number.MAX_VALUE);// -Infinity
console.log(typeof Infinity);// number

NaN是一个特殊的数字,表示Not A Number

  • 使用typeof检查一个NaN也会返回number
console.log(typeof NaN);// number

注意:
1、在JS中整数的运算基本可以保证精确
2、如果使用JS进行浮点运算,可能得到一个不精确的结果,所以千万不要使用JS进行对精确度要求比较高的运算

Boolean 类型

Boolean布尔值
布尔值只有两个,主要用来做逻辑判断

  • true- 表示真
  • false- 表示假

使用typeof检查一个布尔值时,会返回boolean

var bool = false;			
console.log(typeof bool);//boolean
console.log(bool);//false

Null 类型

Null(空值)类型的值只有一个,就是null
null这个值专门用来表示一个为空的对象
使用typeof检查一个null值时,会返回object

var a = null;
console.log(typeof a);// object

Undefined 类型

Undefined(未定义)类型的值只有一个,就undefind
当声明一个变量,但是并不给变量赋值时,它的值就是undefined
使用typeof检查一个undefined时也会返回undefined

var b = undefined;
console.log(typeof b);// undefined

Object(对象) 类型

Object对象
对象属于一种复合的数据类型,在对象中可以保存多个不同数据类型的属性。

对象的分类:
1、内建对象

  • 由ES标准中定义的对象,在任何的ES的实现中都可以使用
  • 比如:MathStringNumberBooleanFunctionObject…等

2、宿主对象

  • 由JS的运行环境提供的对象,目前来讲主要指由浏览器提供的对象
  • 比如 BOMDOM

3、自定义对象

  • 由开发人员自己创建的对象

创建对象

  • 使用new关键字调用的函数,是构造函数constructor
  • 构造函数是专门用来创建对象的函数
  • 使用typeof检查一个对象时,会返回object
var obj = new Object();

在对象中保存的值称为”属性”
向对象添加属性
语法: 对象.属性名 = 属性值;

//向obj中添加一个name属性
obj.name = "孙悟空";
//向obj中添加一个gender属性
obj.gender = "男";
//向obj中添加一个age属性
obj.age = 18;

对象的属性值可以是任何的数据类型,也可以是个函数

obj.sayName = function(){
	console.log(obj.name);
};
function fun(){
	console.log(obj.name);
};

调方法

obj.sayName();

读取对象中的属性
语法:对象.属性名

console.log(obj.gender);

修改对象的属性值
语法:对象.属性名 = 新值

obj.name = "tom";

删除对象的属性
语法:delete 对象.属性名

delete obj.name;

枚举对象的属性

使用for ... in语句
语法:

for(var 变量 in 对象){

}

for...in语句 对象中有几个属性,循环体就会执行几次
每次执行时,会将对象中的一个属性的名字赋值给变量

var obj = {
	name:"孙悟空",
	age:18,
	gender:"男",
	address:"花果山"
 };
 for(var n in obj){
	console.log("属性名:"+n);
	console.log("属性值:"+obj[n]);
}

数据类型的存储

基本数据类型
StringNumberBooleanNullUndefined

引用数据类型
Object

JS中的变量都是保存到栈内存中的

基本数据类型的值直接在栈内存中存储,

  • 值与值之间是独立存在,修改一个变量不会影响其他的变量

对象是保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟出一个新的空间,

  • 而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,
  • 当一个通过一个变量修改属性时,另一个也会受到影响

强制类型转换

指将一个数据类型强制转换为其他的数据类型
类型转换主要指,将其他的数据类型,转换为StringNumberBoolean

转换为 String 类型

将其他的数据类型转换为String
方式一:

  • 调用被转换数据类型的toString()方法
  • 该方法不会影响到原变量,它会将转换的结果返回
  • 但是注意:nullundefined这两个值没有toString()方法,
      如果调用他们的方法,会报错
var a = 123;
//调用a的toString()方法
//调用xxx的yyy()方法,就是xxx.yyy()
a = a.toString();
console.log(a);// “123”
a = true;
a = a.toString();
console.log(a);// “true”

a = null;
a = a.toString();
console.log(a);//报错

a = undefined;
a = a.toString();
console.log(a);//报错

方式二:

  • 调用String()函数,并将被转换的数据作为参数传递给函数
  • 使用String()函数做强制类型转换时,
      1、对于NumberBoolean实际上就是调用的toString()方法
      2、但是对于nullundefined,就不会调用toString()方法
        (1)它会将 null直接转换为"null"
        (2)将undefined直接转换为"undefined"
a = 123;
//调用String()函数,来将a转换为字符串
a = String(a);
console.log(a);//"123"

a = null;
a = String(a);
console.log(a);//"null"

a = undefined;
a = String(a);
console.log(a);//"undefuned"

转换为 Number 类型

将其他的数据类型转换为Number
转换方式一:
使用Number()函数

  • 字符串 --> 数字
    1、如果是纯数字的字符串,则直接将其转换为数字
    2、如果字符串中有非数字的内容,则转换为NaN
    3、如果字符串是一个空串或者是一个全是空格的字符串,则转换为0
  • 布尔 --> 数字
    true转成1
    false转成 0
  • null–> 数字 0
  • undefined–> 数字NaN
//调用Number()函数来将a转换为Number类型
var a = "123";
a = Number(a);
console.log(typeof a);// Number
console.log(a);// 123

a = false;
a = Number(a);
console.log(typeof a);// Number
console.log(a);// 0

a = null;
a = Number(a);
console.log(typeof a);// Number
console.log(a);// 0

a = undefined;
a = Number(a);
console.log(typeof a);// Number
console.log(a);// NaN

转换方式二:

  • 这种方式专门用来对付字符串
  • parseInt()把一个字符串转换为一个整数
  • parseFloat()把一个字符串转换为一个浮点数
//调用parseInt()函数将a转换为Number
//parseInt()可以将一个字符串中的有效的整数内容去出来,
//然后转换为Number
a = "123567a567px";
a = parseInt(a);
console.log(typeof a);// Number
console.log(a);// 123567


//parseFloat()作用和parseInt()类似,不同的是它可以获得有效的小数
a = "123.456.789px";
a = parseFloat(a);
console.log(typeof a);// Number
console.log(a);// 123.456

//如果对非String使用parseInt()或parseFloat()
//它会先将其转换为String然后在操作
a = true;
a = parseInt(a);
console.log(typeof a);// Number
console.log(a);// NaN

a = 198.23;
a = parseInt(a);
console.log(typeof a);// Number
console.log(a);// 198

进制数字转换

16进制: 如果需要表示16进制的数字,则需要以0x开头
8进制: 如果需要表示8进制的数字,则需要以0开头
2进制: 如果要要表示2进制的数字,则需要以0b开头

但是不是所有的浏览器都支持

//十六进制
a = 0x10;
a = 0xff;
a = 0xCafe;

//八进制数字
a = 070;

//二进制数字
a = 0b10;

//向"070"这种字符串,有些浏览器会当成8进制解析,有些会当成10进制解析
a = "070";

//可以在parseInt()中传递一个第二个参数,来指定数字的进制
a = parseInt(a,10);

console.log(typeof a);
console.log(a);// 70

转换为 Boolean 类型

将其他的数据类型转换为Boolean

使用Boolean()函数

  • 数字 —> 布尔
    除了0NaN,其余的都是true
  • 字符串 —> 布尔
    除了空串,其余的都是true
  • nullundefined都会转换为false
  • 对象也会转换为true
var a = 123; //true
a = -123; //true
a = 0; //false
a = Infinity; //true
a = NaN; //false
//调用Boolean()函数来将a转换为布尔值
a = Boolean(a);

a = " ";//true
a = "";//false
a = Boolean(a);

a = null; 
a = Boolean(a);//false

a = undefined;
a = Boolean(a);//false

console.log(typeof a);
console.log(a);

运算符

运算符也叫操作符
通过运算符可以对一个或多个值进行运算,并获取运算结果

  • 比如:typeof就是运算符,可以来获得一个值的类型
    它会将该值的类型以字符串的形式返回numberstringbooleanundefinedobject

算数运算符
当对非Number类型的值进行运算时,会将这些值转换为Number然后在运算

注意:
何值和NaN做运算都得NaN
任何值做- * /运算时都会自动转换为Number,可以通过为一个值-0*1/1来将其转换为Number

+

  • +可以对两个值进行加法运算,并将结果返回
  • 如果对两个字符串进行加法运算,则会做拼串
    会将两个字符串拼接为一个字符串,并返回
  • 任何的值和字符串做加法运算,都会先转换为字符串,然后再和字符串做拼串的操作
var a = 123;
var result = typeof a;
//console.log(typeof result);
result = a + 1;//124
result = 456 + 789;//1245
result = true + 1;//2
result = true + false;//1
result = 2 + null;// 2
result = 2 + NaN;//NaN
result = "你好" + "大帅哥"; //你好大帅哥
var str = "锄禾日当午," +
		  "汗滴禾下土," +
		  "谁知盘中餐," +
		  "粒粒皆辛苦";
result = 123 + "1"; //"1231"
result = true + "hello"; //truehello
//任何值和字符串相加都会转换为字符串,并做拼串操作
/*
 * 我们可以利用这一特点,来将一个任意的数据类型转换为String
 * 	我们只需要为任意的数据类型 + 一个 "" 即可将其转换为String
 * 	这是一种隐式的类型转换,由浏览器自动完成,实际上它也是调用String()函数
 */
var c = 123;
c = c + "";//"123"
result = 1 + 2 + "3"; //33
result = "1" + 2 + 3; //123
console.log("result = "+result);

-

  • 可以对两个值进行减法运算,并将结果返回
result = 100 - 5;//95
result = 100 - true;//99
result = 100 - "1";//99
console.log("result = "+result);

*

  • 可以对两个值进行乘法运算
result = 2 * 2;//4
result = 2 * "8";//16
result = 2 * undefined;//NaN
result = 2 * null;//0
console.log("result = "+result);

/

  • 可以对两个值进行除法运算
result = 4 / 2;//2	
result = 3 / 2;//1.5
console.log("result = "+result);

%

  • % 取模运算(取余数)
result = 9 % 3;//0
result = 9 % 4;//1
result = 9 % 5;//4
console.log("result = "+result);

一元运算符

+正号

  • 正号不会对数字产生任何影响

-负号

  • 负号可以对数字进行负号的取反

对于非Number类型的值,

  • 它会将先转换为Number,然后在运算
  • 可以对一个其他的数据类型使用+,来将其转换为number
  • 它的原理和Number()函数一样
var a = 123;
a = -a;//-123
a = true;//true
a = "18";//18  string
a = +a;//18 number
console.log("a=" + a);

var result = 1 + +"2" + 3;//6
console.log("result =" + result);

自增(++)和自减(–)

自增 ++

  • 通过自增可以使变量在自身的基础上增加1
  • 对于一个变量自增以后,原变量的值会立即自增1
  • 自增分成两种:后++(a++)和 前++(++a)
    1、无论是a++还是++a,都会立即使原变量的值自增1
      不同的是a++++a的值不同
    2、a++的值等于原变量的值(自增前的值)
    3、++a的值等于新值 (自增后的值)
var a = 1;
//使a自增1
var b = a++;//1
console.log(a);//2

var a = 1;
//使a自增1
var b = ++a;//2
console.log(a);//2

自减 –

  • 通过自减可以使变量在自身的基础上减1
  • 自减分成两种:后--(a--)和 前--(--a)
    1、无论是a--还是--a都会立即使原变量的值自减1
      不同的是a----a的值不同
    2、a--是变量的原值 (自减前的值)
    3、--a是变量的新值 (自减以后的值)
var b= 10;
var c = b--;//10
console.log(b);//9

var b = 10;
//使a自增1
var v = --b;//9
console.log(b);//9

运算符

逻辑运算符

JS中为我们提供了三种逻辑运算符
!

  • !可以用来对一个值进行非运算
  • 所谓非运算就是值对一个布尔值进行取反操作,
    truefalsefalsetrue
  • 如果对一个值进行两次取反,它不会变化
  • 如果对非布尔值进行元素,则会将其转换为布尔值,然后再取反
     所以我们可以利用该特点,来将一个其他的数据类型转换为布尔值
     可以为一个任意数据类型取两次反,来将其转换为布尔值,
     原理和Boolean()函数一样
var a = false;
//对a进行非运算
a = !a;
console.log("a = "+a);//true

var b = 10;
b = !!b;
console.log("b = "+b);//true
console.log(typeof b);//boolean

&&

  • &&可以对符号两侧的值进行与运算并返回结果
  • 运算规则
  • 两个值中只要有一个值为false就返回false
     只有两个值都为true时,才会返回true
  • JS中的“与”属于短路的与,
     如果第一个值为false,则不会看第二个值
//如果两个值都是true则返回true
var result = true && true;//true

//只要有一个false,就返回false
result = true && false;//false
result = false && true;//false
result = false && false;//false
console.log("result = "+ result);

//第一个值为true,会检查第二个值
true && alert("看我出不出来!!");

//第一个值为false,不会检查第二个值
false && alert("看我出不出来!!");

||

  • ||可以对符号两侧的值进行或运算并返回结果
  • 运算规则:
     两个值中只要有一个true,就返回true
     如果两个值都为false,才返回false
  • 注意: JS中的“或”属于短路的或
     如果第一个值为true,则不会检查第二个值
//两个都是false,则返回false
result = false || false;

//只有有一个true,就返回true
result = true || false;
result = false || true ;
result = true || true ;
//console.log("result = "+result);

//第一个值为false,则会检查第二个值
false || alert("123");

//第一个值为true,则不再检查第二个值
true || alert("123");

&&||非布尔值的情况

  • 对于非布尔值进行与或运算时,
     会先将其转换为布尔值,然后再运算,并且返回原值
  • 与运算("&&"):
     如果第一个值为true,则必然返回第二个值
     如果第一个值为false,则直接返回第一个值
//与运算:如果两个值都为true,则返回后边的
var result = 5 && 6;


//与运算:如果两个值中有false,则返回靠前的false
//false && true
result = 0 && 2;//0
result = 2 && 0;//0
//false && false
result = NaN && 0;//NaN
result = 0 && NaN;//0
  • 或运算("||")
     如果第一个值为true,则直接返回第一个值
     如果第一个值为false,则返回第二个值
//如果第一个值为true,则直接返回第一个值
result = 2 || 1;//2
result = 2 || NaN;//2
result = 2 || 0;//2

//如果第一个值为false,则直接返回第二个值
result = NaN || 1;//1
result = NaN || 0;//0

result = "" || "hello";//hello

result = -1 || "你好";//-1

赋值运算符

=赋值运算符

  • 可以将符号右侧的值赋值给符号左侧的变量

+=
 a += 5 等价于 a = a + 5
-=
 a -= 5 等价于 a = a - 5
*=
 a *= 5 等价于 a = a * 5
/=
 a /= 5 等价于 a = a / 5
%=
 a %= 5 等价于 a = a % 5

关系运算符

通过关系运算符可以比较两个值之间的大小关系,如果关系成立它会返回true,如果关系不成立则返回false

>大于号

  • 判断符号左侧的值是否大于右侧的值
  • 如果关系成立,返回true,如果关系不成立则返回false
var result = 5 > 10;//false

>=大于等于

  • 判断符号左侧的值是否大于或等于右侧的值
var result;
result = 5 >= 5; //true
result = 5 >= 4; //true

<小于号

  • 判断符号左侧的值是否小于右侧的值
  • 如果关系成立,返回true,如果关系不成立则返回false
var result;
result = 5 < 4; //false

<=小于等于

  • 判断符号左侧的值是否小于或等于右侧的值
var result;
result = 4 <= 4; //true

非数值的情况

  • 对于非数值进行比较时,会将其转换为数字然后在比较
console.log(1 > true); //false
console.log(1 >= true); //true
console.log(1 > "0"); //true
console.log(10 > null); //true
//任何值和NaN做任何比较都是false
console.log(10 <= "hello"); //false
  • 如果符号两侧的值都是字符串时,不会将其转换为数字进行比较,而会分别比较字符串中字符的Unicode编码
//比较两个字符串时,比较的是字符串的字符编码
console.log("a" < "b");//true

//比较字符编码时是一位一位进行比较
//如果两位一样,则比较下一位,所以借用它来对英文进行排序
console.log("abc" < "bcd");//true

//比较中文时没有意义
console.log("戒" > "我"); //true

//如果比较的两个字符串型的数字,可能会得到不可预期的结果
//注意:在比较两个字符串型的数字时,一定一定一定要转型
console.log("11123123123123123123" < +"5"); //true

相等运算符

相等运算符用来比较两个值是否相等,如果相等会返回true,否则返回false

==相等

  • 当使用==来 比 较两个值时,如果值的类型不同,
     则会自动进行类型转换,将其转换为相同的类型
     然后在比较
console.log(1 == 1); //true
vara = 10;
console.log(a == 4); //false
console.log("1" == 1); //true
console.log(true == "1"); //true
console.log(null == 0); //false
/*
 * undefined 衍生自 null
 * 	所以这两个值做相等判断时,会返回true
 */
console.log(undefined == null);//true
/*
 * NaN不和任何值相等,包括他本身
 */
//console.log(NaN == NaN); //false

var b = NaN;
//判断b的值是否是NaN
console.log(b == NaN);//false
/*
 * 可以通过isNaN()函数来判断一个值是否是NaN
 * 	如果该值是NaN则返回true,否则返回false
 */
console.log(isNaN(b));//true

!=不相等

  • 不相等用来判断两个值是否不相等,如果不相等返回true,否则返回false
  • 使用!=来做不相等运算
  • 不相等也会对变量进行自动的类型转换,如果转换后相等它也会返回false
console.log(10 != 5); //true
console.log(10 != 10); //false
console.log("abcd" != "abcd"); //false
console.log("1" != 1);//false

===全等

  • 用来判断两个值是否全等,它和相等类似,不同的是它不会做自动的类型转换
     如果两个值的类型不同,直接返回false
console.log("123" === 123);//false
console.log(null === undefined);//false

!==不全等

  • 用来判断两个值是否不全等,和不等类似,不同的是它不会做自动的类型转换
     如果两个值的类型不同,直接返回true
console.log(1 !== "1"); //true

条件运算符(三元(目)运算符)

条件运算符也叫三元运算符
语法:
条件表达式?语句1:语句2;

  • 执行的流程:
     条件运算符在执行时,首先对条件表达式进行求值
     如果该值为true,则执行语句1,并返回执行结果
     如果该值为false,则执行语句2,并返回执行结果
     如果条件的表达式的求值结果是一个非布尔值,会将其转换为布尔值然后在运算
var a = 300;
var b = 143;
var c = 50;

a > b ? alert("a大"):alert("b大");

in运算符

通过该运算符可以检查一个对象中是否含有指定的属性

  • 如果有则返回true,没有则返回false
  • 语法:"属性名" in 对象
//检查obj中是否含有test2属性
console.log("test2" in obj);
console.log("test" in obj);
console.log("name" in obj);

运算符的优先级

我们并不需要记忆,如果遇到优先级不清楚,可以使用()来改变优先级

代码块

我们的程序是由一条一条语句构成的

  • 语句是按照自上向下的顺序一条一条执行的
  • 在JS中可以使用{}来为语句进行分组,
  • 同一个{}中的语句我们称为是一组语句,
  • 它们要么都执行,要么都不执行

一个{}中的语句我们也称为叫一个代码块,在代码块的后边就不用再编写了

  • JS中的代码块,只具有分组的的作用,没有其他的用途
  • 代码块内容的内容,在外部是完全可见的

语句

流程控制语句

流程控制语句

  • JS中的程序是从上到下一行一行执行的
  • 通过流程控制语句可以控制程序执行流程,
     使程序可以根据一定的条件来选择执行
  • 语句的分类:
     1.条件判断语句
     2.条件分支语句
     3.循环语句

条件判断语句:

  • 使用条件判断语句可以在执行某个语句之前进行判断,
     如果条件成立才会执行语句,条件不成立则语句不执行。
  • if语句
     if语句在执行时,会先对条件表达式进行求值判断,
     如果条件表达式的值为true,则执行if后的语句,
     如果条件表达式的值为false,则不会执行if后的语句。
      if语句只能控制紧随其后的那个语句,
      如果希望if语句可以控制多条语句,
      可以将这些语句统一放到代码块中
     if语句后的代码块不是必须的,但是在开发中尽量写上代码块,即使if后只有一条语句
if(条件表达式){
语句...
}

if语句

一般的if语句

var num = 20;
//如果num为10,则输出哈哈哈哈哈哈
if(num == 10){
	alert("哈哈哈哈哈哈");
}else if(num == 20{
	alert("嘿嘿");
}else{
	alert("嘎嘎");
}

条件分支(switch)语句

条件分支语句也叫switch语句

switch(条件表达式){
	case 表达式:
		语句...
		break;
	case 表达式:
		语句...
		break;
	default:
		语句...
		break;
}

执行流程:
switch...case..语句
在执行时会依次将case后的表达式的值和switch后的条件表达式的值进行全等比较,

  • 如果比较结果为true,则从当前case处开始执行代码。
    • 当前case后的所有的代码都会执行,我们可以在case的后边跟着一个break关键字,这样可以确保只会执行当前case后的语句,而不会执行其他的case
  • 如果比较结果为false,则继续向下比较
  • 如果所有的比较结果都为false,则只执行default后的语句

switch语句和if语句的功能实际上有重复的,使用switch可以实现if的功能,

  • 同样使用if也可以实现switch的功能,所以我们使用时,可以根据自己的习惯选择。
var num = 3;
			
/*if(num == 1){
	console.log("壹");
}else if(num == 2){
	console.log("贰");
}else if(num == 3){
	console.log("叁");
}*/

num = "hello";
switch(num){
	case 1:
		console.log("壹");
		//使用break可以来退出switch语句
		break;
	case 2:
		console.log("贰");
		break;
	case 3:
		console.log("叁");
		break;
	default:
		console.log("非法数字~~");
		break;
}

(while)循环语句

循环语句:

  • 通过循环语句可以反复的执行一段代码多次

while循环

  • 语法:
while(条件表达式){
语句...
}

 创建一个循环

//1.创初始化一个变量
var i = 11;
//2.在循环中设置一个条件表达式
while(i <= 10){
	//3.定义一个更新表达式,每次更新初始化变量
	document.write(i++ +"<br />")
}
  • while语句在执行时,
    1、先对条件表达式进行求值判断,
    2、如果值为true,则执行循环体,
    3、循环体执行完毕以后,继续对表达式进行判断
    4、如果为true,则继续执行循环体,以此类推
    5、如果值为false,则终止循环

do…while循环

  • 语法:
do{
	语句...
}while(条件表达式)

创建do…while循环

var i = 11;
do{
	document.write(i++ +"<br />");
}while(i <= 10);
  • 执行流程:
    1、do…while语句在执行时,会先执行循环体,
    2、循环体执行完毕以后,在对while后的条件表达式进行判断,
    3、如果结果为true,则继续执行循环体,执行完毕继续判断以此类推
    4、如果结果为false,则终止循环

实际上这两个语句功能类似

不同:

  • while是先判断后执行,而do…while会先执行后判断
  • do…while可以保证循环体至少执行一次,而while不能

死循环
 这种将条件表达式写死为true的循环,叫做死循环
 该循环不会停止,除非浏览器关闭,死循环在开发中慎用
 可以使用break,来终止循环

var n = 1;
while(true){
alert(n++);
//判断n是否是10
if(n == 10){
	//退出循环
	break;
}

for循环

for语句,也是一个循环语句,也称为for循环
在for循环中,为我们提供了专门的位置用来放三个表达式:
1、初始化表达式
2、条件表达式
3、更新表达式

for循环的语法:

for(①初始化表达式;②条件表达式;④更新表达式){
	③语句...
}

for循环的执行流程:
1、执行初始化表达式,初始化变量(初始化表达式只会执行一次)
2、执行条件表达式,判断是否执行循环。
3、如果为true,则执行循环
  如果为false,终止循环
4、执行更新表达式,更新表达式执行完毕继续重复②

for(var i = 0 ; i < 10 ; i++ ){
	alert(i);
}

for循环中的三个部分都可以省略,也可以写在外部
如果在for循环中不写任何的表达式,只写两个;
此时循环是一个死循环会一直执行下去,慎用

for(;;){
	alert("hello");
}

break 和 continue

break关键字可以用来退出switch或循环语句
continue关键字可以用来跳过当次循环

不能在if语句中使用breakcontinue
break关键字,会立即终止离他最近的那个循环语句
continue也是默认只会对离他最近的循环循环起作用

函数

函数function

  • 函数也是一个对象
  • 函数中可以封装一些功能(代码),在需要时可以执行这些功能(代码)
  • 函数中可以保存一些代码在需要的时候调用
  • 使用typeof检查一个函数对象时,会返回function

我们在实际开发中很少使用构造函数来创建一个函数对象
创建一个函数对象,可以将要封装的代码以字符串的形式传递给构造函数

var fun = new Function("console.log('Hello 这是我的第一个函数');");

封装到函数中的代码不会立即执行
函数中的代码会在函数调用的时候执行
调用函数语法:函数对象()
当调用函数时,函数中封装的代码会按照顺序执行

使用 函数声明 来创建一个函数

语法:

function 函数名([形参1,形参2...形参N]){
	语句...
}
function fun2(){
	console.log("这是我的第二个函数~~~");
	alert("哈哈哈哈哈");
	document.write("~~~~(>_<)~~~~");
}
console.log(fun2);
//调用fun2
fun2();

使用 函数表达式 来创建一个函数

var 函数名  = function([形参1,形参2...形参N]){
	语句....
}
var fun3 = function(){
	console.log("我是匿名函数中封装的代码");
};
//调用fun3
fun3();

函数返回值

可以使用 return 来设置函数的返回值

  • 语法:
return 值
  • return后的值将会会作为函数的执行结果返回,

  • 可以定义一个变量,来接收该结果

  • 在函数中return后的语句都不会执行

  • 如果return语句后不跟任何值就相当于返回一个undefined

  • 如果函数中不写return,则也会返回undefined

  • return后可以跟任意类型的值

function sum(a , b , c){
	//alert(a + b +c);
	var d = a + b + c;
	return d;
	//return undefined;
}

调用函数
 变量result的值就是函数的执行结果
 函数返回什么result的值就是什么

function sum(a , b , c){
	//alert(a + b +c);
	var d = a + b + c;
	return d;
	//return undefined;
}
var result = sum(4,7,8);
console.log("result = "+result);

立即执行函数

函数定义完,立即被调用,这种函数叫做立即执行函数
立即执行函数往往只会执行一次

(function(a,b){
	console.log("a = "+a);
	console.log("b = "+b);
})(123,456);

函数也可以称为对象的属性

  • 如果一个函数作为一个对象的属性保存,那么我们称这个函数时这个对象的方法
  • 调用这个函数就说调用对象的方法method,但是它只是名称上的区别没有其他的区别
var obj2 = {
	name:"猪八戒",
	age:18,
	sayName:function(){
		console.log(obj2.name);
	}
};
obj2.sayName();

this

  解析器在调用函数每次都会向函数内部传递进一个隐含的参数,这个隐含的参数就是this,this指向的是一个对象,这个对象我们称为函数执行的 上下文对象.
  根据函数的调用方式的不同,this会指向不同的对象:
   1、以函数的形式调用时,this永远都是window

function fun(){
	//console.log("a = "+a+", b = "+b);
	console.log(this.name);
}
fun();//没有结果输出

   2、以方法的形式调用时,this就是调用方法的那个对象

function fun(){
	//console.log("a = "+a+", b = "+b);
	console.log(this.name);
}

//创建一个对象
var obj = {
	name:"孙悟空",
	sayName:fun
};

var obj2 = {
	name:"沙和尚",
	sayName:fun
};
var name = "全局的name属性";
obj2.sayName();//沙和尚

原型(prototype)

我们所创建的每一个函数,解析器都会向函数中添加一个属性prototype
  这个属性对应着一个对象,这个对象就是我们所谓的原型对象
如果函数作为普通函数调用prototype没有任何作用
当函数以构造函数的形式调用时,它所创建的对象中都会有一个隐含的属性,
  指向该构造函数的原型对象,我们可以通过__proto__来访问该属性

原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象,
  我们可以将对象中共有的内容,统一设置到原型对象中。

当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,如果有则直接使用,
  如果没有则会去原型对象中寻找,如果找到则直接使用

以后我们创建构造函数时,可以将这些对象共有的属性和方法,统一添加到构造函数的原型对象中,
  这样不用分别为每一个对象添加,也不会影响到全局作用域,就可以使每个对象都具有这些属性和方法了

JavaScript对象

Array 对象

Array 对象属性

属性描述
constructor返回对创建此对象的数组函数的引用。
length设置或返回数组中元素的数目。
prototype使您有能力向对象添加属性和方法。

Array 对象方法

方法描述
concat()连接两个或更多的数组,并返回结果。
join()把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
pop()删除并返回数组的最后一个元素
push()向数组的末尾添加一个或更多元素,并返回新的长度。
reverse()颠倒数组中元素的顺序。
shift()删除并返回数组的第一个元素
slice()从某个已有的数组返回选定的元素
sort()对数组的元素进行排序
splice()删除元素,并向数组添加新元素。
toSource()返回该对象的源代码。
toString()把数组转换为字符串,并返回结果。
toLocaleString()把数组转换为本地数组,并返回结果。
unshift()向数组的开头添加一个或更多元素,并返回新的长度。
valueOf()返回数组对象的原始值

Boolean 对象

Boolean 对象属性
|属性 |描述 |
|:-------- |: -----|
|constructor|返回对创建此对象的 Boolean 函数的引用|
|prototype|使您有能力向对象添加属性和方法。|

Boolean 对象方法

方法描述
toSource()返回该对象的源代码。
toString()把逻辑值转换为字符串,并返回结果。
valueOf()返回 Boolean 对象的原始值。

String 对象

String 对象属性

属性描述
constructor对创建该对象的函数的引用
length字符串的长度
prototype允许您向对象添加属性和方法

String 对象方法

方法描述
anchor()创建 HTML 锚。
big()用大号字体显示字符串。
blink()显示闪动字符串。
bold()使用粗体显示字符串。
charAt()返回在指定位置的字符。
charCodeAt()返回在指定的位置的字符的 Unicode 编码。
concat()连接字符串。
fixed()以打字机文本显示字符串
fontcolor()使用指定的颜色来显示字符串。
fontsize()使用指定的尺寸来显示字符串。
fromCharCode()从字符编码创建一个字符串。
indexOf()检索字符串。
italics()使用斜体显示字符串。
lastIndexOf()从后向前搜索字符串。
link()将字符串显示为链接。
localeCompare()用本地特定的顺序来比较两个字符串。
match()找到一个或多个正则表达式的匹配。
replace()替换与正则表达式匹配的子串。
search()检索与正则表达式相匹配的值。
slice()提取字符串的片断,并在新的字符串中返回被提取的部分。
small()使用小字号来显示字符串。
split()把字符串分割为字符串数组。
strike()使用删除线来显示字符串。
sub()把字符串显示为下标。
substr()起始索引号提取字符串中指定数目的字符。
substring()提取字符串中两个指定的索引号之间的字符。
sup()把字符串显示为上标。
toLocaleLowerCase()把字符串转换为小写。
toLocaleUpperCase()把字符串转换为大写。
toLowerCase()把字符串转换为小写。
toUpperCase()把字符串转换为大写。
toSource()代表对象的源代码。
toString()返回字符串。
valueOf()返回某个字符串对象的原始值。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值