ECMAScript是一个标准,而这个标准是需要各个厂商去实现的。 不同的浏览器厂商对该标准会有不同的实现 浏览器 Javascript实现方式 FireFox SpiderMonkey Internet Explorer JScript/Chakra Safari JavaScriptCore Chrome v8 Carakan Carakan ============================================================================ 控制浏览器弹出一个警告框 alert("我是一个警告框"); 向body中输出一个内容 document.white("我是向body输出的内容"); 向控制台输出一个内容 console.log("我是向控制台输出的内容"); ==================================================================================
JS代码的加载位置: 1. 可以将JS代码写在onclick属性中,当点击按钮时,JS会执行;但是不方便维护,所以不建议使用 2. 可以将JS代码写在href属性中,当点击链接时,会执行JS 点击 点击 可以阻止a标签的跳转行为 3. 可以将JS代码写在外部JS文件中,然后通过script标签引入 而且写到外部的JS文件可以在不同的页面中引用,也可以利用浏览器的缓存机制,一般推荐使用这种方法
==================================================================================
JS严格区分大小写 JS中的每一条语句都以;结束,但是如果不写;浏览器也会自动添加,但是会消耗一些系统资源,有时候浏览器会加错分号,所以尽量在开发中就书写分号 JS中会自动忽略多个空格和换行
=====================================================================
字面量:都是一些不可改变的值,可以直接使用,但是一般都不直接使用 变量:变量可以用来保存字面量,而且变量的值是可以任意改变的 变量的声明 var a;
======================================================================
标识符 在JS中所有的可以由我们自主命名的都可以称为标识符。例如:变量名、函数名、属性名等都是标识符 标识符的命名规则: 1.标识符可以包含字母、数字、 _ $ 2.不能以数字开头 3.不能时JS中的保留字或关键字 4.一般采用驼峰命名法 myEnglishName:首字母小写,每个单词的开头字母大写,其余字母小写 JS底层保存标识符时实际上是采用的是Unicode编码
=========================================================================
数据类型指的就是字面量的类型。在JS中,共有6种数据类型: String :字符串类型 Boolean :布尔类型 Number :数值 Null :空值 Undefined :未定义 Object :对象 其中String Boolean Number Null Undefined 是基本数据类型 Object是引用数据类型
String字符串: 在JS中字符串需要使用引号(单引号或双引号,但是不可以混着使用)引起来 引号不可以嵌套:单引号里面不能放单引号,双引号里面不能放双引号 console.log("你好"呀"") ;双引号里面不能嵌套双引号 在字符串中,我们可以使用 \ 作为转义字符 \" 表示 "" \' 表示' \n 表示换行 \t 表示制表符(tab) \\ 表示\
Number类型 JS中所有的数值都是Number类型,包括整数和浮点数(小数) Number.MAX_VALUE表示数字的最大值,如果超过了最大值,返回Infinity(表示正无穷),typeof检查数据类型是number Number.MIN_VALUE表示大于0的最小值 NaN 是一个特殊的数字,表示Not A Number,类型检查返回number JS中整数的运算基本是精确的 var a=1+2 返回:3 但是浮点数不是很精确:var a=0.1+0.2 返回0.300000000004
Boolean类型只有2个,主要用来做逻辑判断 true-表示真 false--表示假 typeof返回:boolean
Null类型的值只有一个,就是null,用来表示一个空对象(是空值),typeof类型是object
Undefined类型的值只有一个,就是undefined,表示未定义,当定义一个变量,但是并不给变量赋值时,返回值就是undefined
================================================================================================================================
强制类型转换:是指将一个数据类型转换为另外一个数据类型 类型转换一般是将其他数据类型转换为String Number Boolean 1. 将其他类型转换为String 方法一:调用被转换数据类型的toString()方法,不会影响到原变量,它会将转换的数据返回 var a=123===var b=a.toString() 缺点:对于值是null和undefined,是不可以转换为字符串类型的,他们是没有toString()方法 方法二:调用String()函数,并将被转换的数据作为参数 var a=123===var b=String(a) 也可以将null和undefined转换为字符串类型 2. 将其他数据类型转换为Number类型 方法一:使用Number()函数 var a='123'===var b=Number(a) 将字符串转换为数字: 1.如果是纯数字的字符串,则直接将其转换为数字 var a='123' > 返回123 2.如果字符串中含有非数字的内容,则转换为NaN(不是一个数字),但是typeof类型还是number 3.如果是空字符串或字符串全由空格组成,则转换为0 将布尔转换为数字 如果布尔值是true,则转换为1;如果布尔值是false,则换转换为0 将null转换为数字:直接转换为0 将undefined转换为数字,直接转换为NaN 方法二:主要是用来转换字符串 parseInt()将一个字符串转换为整型Number类型,可以将一个字符串中有效的整数取出来 parseFloat()将一个字符串转换为浮点数Number类型 对于非字符串类型的数据,使用parseInt()或parseFloat()方法,它会先将其转换为字符串String类型,然后再操作 isNaN(X)函数用户检查参数是否是非数字值(检查数字是否非法):如果X是特殊的非数字值NaN(或者被转换为这样的值),返回值为true,如果X是其他值,则为false 备注: 1. isNaN()函数可用于判断其参数是否是NaN,该值表示一个非法的数字(比如被0除后得到的结果) 2. NaN与任何值(包括它自身)相比结果都是false,所以要判断某个值是否是NaN,不可以是==或===,所以,isNaN()函数是必需的 3. isNaN()函数常用于检查parseInt()和parseFloat()的结果,判断他们是否是合法的数字;也可以用来检查算法是否错误
3. 将其他类型转换为Boolean,主要是调用Boolean()函数
数字转换为布尔:除了0和NaN返回false,其余都是返回true
字符串转换为布尔:除了空串,其余都返回true null和undefined都会返回false 对象也会转换为truevar a =" "; //返回 true
var a =""; //返回 false var a =null; //返回 false var a =undefined; //返回 false var a =NaN; //返回 false
undefined转换为Number类型的值是NaN
null转换为Number类型的值是0
undefined转换为String类型的值是undefined
null转换为String类型的值是null
========================================================================
检查变量的类型 typeof 语法:typeof 变量 返回基础类型(小写)string,number,boolean,object,undefined
===============================================================================
在JS中,如果需要表示16进制的数字,则是以0X开头
如果需要表示8进制的数字,则是以0开头 如果需要表示2进制的数字,则是以0b开头,但是并不是所有浏览器都支持 var a="070",如果像是这样的字符串,有些浏览器会解析为8进制,有些会解析成2进制,此时需要为parseInt()设置第2个参数, 用来指示数字的进制数 parseInt(a,10) //表示转换为10进制=================================================================================
流程控制语句
1. 在JS中的程序都是从上到下一步一步开始执行的,通过流程控制语句可以控制程序的执行顺序,使程序可以根据一定的条件来选择执行2. 分类: 条件判断语句 条件分支语句 循环语句
条件判断语句:if语句
语法一: if(条件表达式) { 语句... } if语句在执行时,会先对条件表达式进行求值判断,如果条件条件表达式的值为true,则执行if后面的语句;否则,if后面的语句不执行语法二:if(条件表达式){ 语句.... }else{ 语句... }
if语句在执行时,会先对条件表达式进行求值判断,如果条件条件表达式的值为true,则执行if后面的语句;如果值是false,则执行else后面的语句
语法三:if(条件表达式){ 语句.... }else if(条件表达式){ 语句... }else{ 语句... }
当该语句执行时,会从上向下依次对条件表达式求值判断,如果值为true,则执行当前语句;如果值为false,则继续向下求值判断
条件分支语句:switch语句
语法 : switch(条件表达式){
case 表达式 :
语句...
break;
case 表达式 :
语句...
break;
default :
语句...
break;
}
break的主要作用是退出switch语句
执行流程:执行时,会依次将case后面表达式的值与switch后面的条件表达式的值进行全等比较::如果比较结果为true,则从当前case处执行代码,
break处结束代码的执行,如果比较结果为false,则继续向下比较;如果所有的比较结果都是false,就执行default里面的语句
分数大于60分的输出合格,否则就不合格
循环语句:通过循环语句可以反复的多次执行一段代码
while(条件表达式){
语句....
}
while语句在执行时,先对条件表达式进行求值判断,如果为true,则执行循环体;执行完循环体后,继续对表达式进行求值判断,如果为true,继续执行循环体,以此类推,直到条件表达式的值为false,结束
当m的值为0时,结束循环
do...while循环
do{
语句..
}while(条件表达式)
do...while在执行时,会首先执行do里面的循环体,执行完毕以后,再去判断while条件表达式的值,如果结果为true,继续执行do里面的循环体;
否则,结束循环
while与do...while功能类似,最大的区别是while是先判断条件表达式的值,然后执行;而do...while是先执行循环体,再判断while表达式的值
do...while可以保证循环体至少执行一次
/* * 假如投资的年利率是5%,那么从1000到5000,需要几年的时间 * */ var money = 1000; //初始资金 var year = 1; //年数 while (money < 5000) { money *= 1.05; year++ } console.log(year)
for循环
for(初始表达式;条件表达式;更新表达式){ 语句.... } 执行流程 1. 执行初始化表达式,初始化变量 2. 执行条件表达式,判断是否执行循环,如果为true,则执行循环体;否则,终止循环 3. 执行更新表达式,执行完毕,重复第2步骤(更新表达式是在执行循环体完毕以后,再执行的)
//打印0 1 2 3 4 for (var m = 0; m < 5; m++) { console.log(m); } //打印4 3 2 1 0 for (var m = 4; m >= 0; m--) { console.log(m); }
//打印1-100之间的所有奇数的和(奇数:不能被2整除的数) var sum = 0; for (var m = 1; m <= 100; m++) { //判断m是否是奇数 if (m % 2 != 0) { sum += m; } } console.log(sum)
//打印1-100之间的所有7的倍数的个数及和 var sum = 0; var count = 0; for (var m = 1; m <= 100; m++) { //判断m是否是7的倍数 if (m % 7 == 0) { sum += m; count++; //console.log(m); } } console.log("1-100之间所有的7的倍数有:" + count + "个"); //返回:14 console.log("1-100之间所有的7的倍数的和是:" + sum); //返回:735
/* * 水仙花数:是指一个3位数,他的每个位上的数字的3次幂之和等于他本身(例如1^3+5^3+3^3=153) * */ for (var n = 100; n < 1000; n++) { //将3位数分别拆分:百位、十位、个位 //方法一 var bai = parseInt(n / 100); var shi = parseInt(n % 100 / 10); var ge = parseInt(n % 100 % 10); //方法二 var bai = parseInt(n / 100); var shi = parseInt((n - bai * 100) / 10); var ge = parseInt((n - bai * 100 - shi * 10) / 1); //方法三 var bai = +String(n).substring(0, 1); var shi = +String(n).substring(1, 2); var ge = +String(n).substring(2, 3); if (bai * bai * bai + shi * shi * shi + ge * ge * ge == n) { console.log(n); //返回 153 370 371 407 } }
/* * 判断一个数是否是质数:只能被1和它自身整除的数,1既不是质数也不是合数,质数必须是大于1的自然数 * */ var num = prompt('请输入一个大于1的自然数'); //中间变量:表示是否是质数 var flag = true; for (var i = 2; i < num; i++) { console.log(i); if (num % i == 0) { //如果num能被i整除,那么num一定不是质数 flag = false; break; //直接跳出for循环 } } if (flag) { alert('是质数'); } else { alert('不是质数') }
/* * 输出以下的形状 * * 1 2*1-1 * *** 3 2*2-1 * ***** 5 2*3-1 * ******* 7 2*4-1 * */ for (var i = 1; i < 5; i++) { var num = 2 * i - 1; for (var j = 1; j <= num; j++) { document.write('*'); } document.write(''); }
/* * 打印9*9乘法表 * 1*1=1 * 1*2=2 2*2 * 1*3=3 2*3=6 3*3=9 * */ for (var i = 1; i <= 9; i++) { for (var j = 1; j <= i; j++) { document.write(i + '*' + j + '=' + i * j+' ') } document.write('') }
/* * 打印出1-100之间所有的质数 1既不是质数也不是合数 * */ for (var m = 2; m <= 100; m++) { var flag = true; for (var n = 2; n < m; n++) { //如果m能被n整除,那么m一定不是质数 if (m % n == 0) { flag = false; break; } } if (flag) { console.log(m); } }
===========================================================================================================
prompt() 方法用于显示可提示用户进行输入的对话框:prompt(text,defaultText) text:可选,要在对话框中显示的纯文本 defaultText:可选,默认的输入文本 如果用户单击取消按钮,返回null;如果用户单击确认按钮,则返回输入字段当前显示的文本 var score=prompt('请输入小名的成绩',90); 在用户点击确认或取消按钮将对话框关闭之前,它将组织用户对浏览器的所有输入;在调用prompt()时,将暂停对JS代码的执行, 在用户做出响应之前,不会执行下一条语句
============================================================================================================================================
break:可以退出switch或立即跳出离它最近的整个for循环
/* * 可以为循环语句创建一个label,来标识当前循环 labelName:循环语句 * 在使用break语句时,可以在break后面跟着labelName,这样就可以结束指定的for循环,而不是最近的for循环 * */ outer: for (var i = 1; i < 4; i++) { console.log('外层循环:' + i) for (var j = 5; j < 10; j++) { console.log('内层循环:' + j); break outer; } }
continue:跳出本层循环(当次循环),继续执行下一次的循环 不可以在if里面使用break和continue ==============================================================================
/* *console.time('timeFlag'):设置一个名为 timeFlag 的计时器 * */ console.time('timeFlag') for(var i=0;i<100;i++){ console.log(i) } //终止一个计时器 返回timeFlag:XXXXs 用来表示从计时器开始到结束所花费的时间 console.timeEnd('timeFlag'); ================================================================================