1.控制浏览器弹出一个警告框
2.让计算机在页面中输出一个内容在 document中写一个内容 (write写)
3.向控制台输出一个内容
1.可以将js代码编写到外部js文件中,然后通过script标签引入
写到外部文件中可以在不同的页面中同时引用,也可以利用到浏览器的缓存机制
2.script标签一旦用于引入外部文 件了,内部就不能再编写代码了,即使编写了
如果需要可以在创建一个新的script标签用于编写内部代码
3.可以将js代码编写到标签的onclick属性中
当我们点击按钮时,js代码才会执行
虽然可以写在标签的属性中,但是他们属于结构与行为耦合,不方便维护
可以将js代码写在超链接的href属性中,这样当点击超链接时,会执行js代码
多行注释,注释中的内容不会被执行,但是可以在源代码中查看
要养成良好的编写注释的习惯,也可以通过注释来对代码进行一些简单的调试
3.JS中严格区分大小写
4.JS中每一条语句以分号(;)结尾
-如果不写分号,浏览器会自动添加,但是会消耗一些系统资源
而且有点时候浏览器会加错分号
5.JS中会忽略多个空格和换行,所以我们可以利用空格和换行对代码进行格式化
1.字面量都是一些不可改变的值
字面量都是可以的直接使用,但是我们一般都不会直接使用字面量变量 变量可以用来保存字面量,而且我们一般都不会直接使用字面量
变量更加方便我们使用,所以在开发中都是通过变量去保存一个字面量
可以通过变量对字面量进行描述
2.把声明变量和对该变量赋值一次完成:
3.变量名允许包含字母、数字、美元符号和下划线(但第一个字符不允许是数字)。为了让比较长的变量名更容易阅读,可以在变量名中的适当位置插入下划线,就像这面这样:
-在js中所有的可以由我们自主命名的都可以称为标识符
-例如:变量名,函数名,属性名都属于标识符
-命名一个标识符时需要遵守如下的规则:
1.标识符中可以含有字母、数字、_、$
2.标识符不能以数字开头
3.标识符不能是ES中的关键字或保留字
4.标识符一般都采用驼峰命名法
通常驼峰法格式是函数名、方法名和对象属性名命名的首选格式
-首字母小写,每个单词的开头字母大写,其余字母小写
--注意:js底层保存标识符是实际上是采用的Unicode编码,
所以理论上讲,所有的utf-8中含有的内容都可以作为标识符
a标识符 自己起的名字
可以含有字母、数字、_、$
标识符不能是ES中的关键字或保留字
1.数据类型指的就是字面量的类型
在js中一共有六中数据类型
1.-字符串由零个或多个字符构成,字符包括(但不限制)字母、数字、标点符号和空号
-在js中字串符需要使用引号引起来
-使用双引号或单引号都可以,但是不要混着用
-引号不能嵌套,双引号不能放双引号,单引号不能放单引号,
单引号里面可以放双引号,双引号里面可以放单引号
2.在字符串中我们可以使用\作为转义字符,
当表示一些特殊符号时可以使用\进行转义
\t 表示制表符(空格)
//输出字面量 字符串str
3.如果想在上面这条语句中使用单引号,就必须保证字母“n”和“t”之间的单引号能别当成这个字符串的一部分,这种情况下这个单引号需要被看做一个普通字符,而不是这个字符串的结束标志,这种情况我们需要对这个字符进行转义,在js里用反斜线对字符串进行转义:
4.类似地,如果想用双引号来包住一个本身就包含双引号的字符串,就必须用反斜线对字符串中的双引号进行转义:
包括整数和浮点数(小数) * 可以使用一个运算符typeof * 来检查一个变量的类型 * 检查数值时,会返回number * 检查字符串时,会返回string
1.在js中所有的数值都是Number类型
如果想给一个变量赋一个数值,不用限定它必须是一个整数,js允许使用带点小数点的数值,并且允许任意位小数,这样的数称为浮点数
也可以使用负值,在有关数值的前面加上一个减号(-)表示它是一个负数:
2.js中可以表示的数字的最大值 (最大值:1.)
3.如果使用Number表示的数字超过了最大值,则会返回一个Infinity
// 在js中整数的运算基本可以保证精确 //如果使用js进行浮点运算,可能得到一个不精确的结果 //所以千万不要使用js进行对精确度要求比较高的运算
布尔值只有俩个,主要用来做逻辑判断
使用typeof检查一个布尔值时,会返回boolean
null这个值专门用来表示一个为空的对象
当声明一个变量,但是并不给变量赋值时,它的值就是undefined
十、强制类型转换-string
- 指将一个数据类型强制转换为其他的数据类型
- 类型转换主要指,将其他的数据类型,转换为
-
将其他类型转换为String
- 该方法不会影响到原变量,它会将转换的结果返回
-调用 String()函数,并将转换的数据作为参数传递给函数
-使用String()函数做强制类型转换时
它会将(字面量)null直接转换为(字符串)"null"
//调用tostring()函数,来将a转换为字符串 (转谁就把谁写在括号里面)
十一、强制类型转换-Number
1.将其他的数据转换为Number
-字符串-->(转换)数字 1.如果是纯数字的字符串,则直接将其转换为数字 2.如果字符串中有非数字的内容,则转换为NaN 3.如果字符串是一个空串或者是一个全是空格的字符串,则转换为0 -这种方式专门用来对付字符串
-parseInt()把一个字符串转换为一个整数
parseInt()可以将一个字符串中的有效的整数内容取出来,(px不是数字所以不读,就只剩下数字)
(如果第一个是英文字母 转换的就是NaN(包括点.也在内 .以后的东西也不读))
它会现将其转换为String然后再操作
1.在js当中,如果需要表示16进制的数字,则需要以0x开头
如果需要表示8进制的数字,则需要以0开头
如果需要表示2进制的数字,则需要以0b开头,但是不是所有的浏览器都支持
将其数据类型转换为boolean
除了0和NaN,其余的都是true 除了空串,其余的都是true -对象也会转换为true通过运算符可以对一个或多个值进行运算,并获取运算结果
比如:tupeof就是运算符,可以来获得一个值得类型
它会将该值的类型以字符串的形式返回
当对非Number类型的值进行运算时,会将这些值转换为Number然后在运算
任何值和NaN做运算都得NaN
+可以对两个值进行加法运算,并将结果返回
如果对俩个字符串进行加法运算,则会做拼串
会将俩个字符串拼接为一个字符串,并返回
任何的值和字符串做加法运算,都会先转换为字符串,然后在和字符串做拼串的操作转成字符串
可以对两个值进行减法运算,并将结果返回
result = "锄禾日当午" //如果想把诗写的工整就这样写 也可以这样写"锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦" //任何值和字符串相加都会转换为字符串,并做拼串操作 我们可以利用这一点,来将一个任意的数据类型转换为string 我们只需要为任意的数据类型加一个""即可将其转换为string 这是一种隐式的类型转换,由浏览器自动完成,实际上它也是调用string()函数 任何值做- * / 运算时都会自动转换为Number 我们可以利用这一特点做隐式的类型转换
一元运算符,只需要一个操作数
-正号不会对数字产生任何影响
-负号可以对数字进行负号的取反
—对于非number类型的值
它会将先转换为number,然后再运算
可以对一个其他的数据类型使用+,来将其转换为number
它的原理和number()函数一样
—通过自增可以使变量在自身的基础上增加1
—对于一个变量自增以后,原变量的值会立即自增1
—自增分为俩种:后++(a++),前++(++a)
无论是a++ 还是++a,都会立即使原变量的值自增1
不同的是a++ 和 ++a的值不同
a++的值等于原变量的值 (自增前的值)
++a的值等于新值 (自增后的值)
—通过自减可以使变量在自身的基础上减1
无论是a--还是--a都会使原变量的值自减1
不同的是a-- 和 --a的值不同
a--的值等于原变量的值 (自增前的值)
--a的值等于新值 (自增后的值)
//第一次c++ 是在10的基础上自增
//第二次c++ 是在11的基础上自增
JS中为我们提供了三种逻辑运算法
— !可以用来对一个值进行非运算 — 所谓非运算就是值对一个布尔值进行取反操作 — 如果对一个值进行俩次取反,它不会变化 — 如果对非布尔值进行元素,则会将其转换为布尔值,然后在取反 所以我们可以利用该特点,来将一个其他的数据类型转换为布尔值 可以为一个任意数据类型去俩次反,来将其转换为布尔值 — &&可以对符号俩侧的值进行与运算并返回结果 — 俩个值中只要有一个值是flase就返回flase 只有俩个值都是true时,才会返回true — js中的“与”属于短路的与 如果第一个值为flase,则不会看第二个值 — ||可以对符号俩侧的值进行或运算并返回结果 — 俩个值中只有一个true,就返回true 如果俩个值都是flase,才返回flase —js中的“或”属于短路的或 如果对一个值为true,则不会检查第二个值 //第一个值为true,会检查第二个值 //第一个值为false,不会检查第二个值 //第一个值为false,则会检查第二个值 //第一个值为true,则不会检查第二个值十九、非布尔值的非与或运算
— 对于非布尔值进行与或运算时 会向将其转换为布尔值,然后在运算,并且返回原值 — 如果第一个值为true,则必然返回第二个值 — 如果第一个值为false,则直接返回第一个值 — 如果第一个值为true,则直接返回第一个值 — 如果第一个值为false,则返回第二个值 // 与运算:如果俩个值都为true,则返回后边的值 //与运算:如果俩个值中有false,则返回靠前的false //如果第一个值为true,则直接返回第一个值 //如果第一个值为false,则直接返回第二个值可以将符号右侧的值赋值给符号左侧的变量
通过关系运算符可以比较俩个值之间的大小关系
如果关系成立它会返回true,如果关系不成立则返回false
— 判断符号左侧的值是否大于右侧
— 如果关系成立,返回 true,如果关系成立则返回 false
— 判断符号左侧的值是否大于或等于右侧的值
— 判断符号左侧的值是否小于右侧
— 如果关系成立,返回 true,如果关系成立则返回 false
— 判断符号左侧的值是否小于或等于右侧的值
—对于非数值进行比较时,会将其转换为数字然后在比较
如果符号俩侧的值都是字符串时,不会将其转换为数字进行比较
而会分别比较字符串中字符的Unicode编码
//任何值和NaN做任何比较都是false
//如果比较的俩个字符串型的数字,可能会得到不可预期的结果
//注意:在比较俩个字符串型的数字时,一定一定一定要转型
//比较俩个字符串时,比较的是字符串的字符编码
//比较字符编码时是一位一位的进行比较
//如果俩位一样,则比较下一位,所以借用它来对英文进行排序
//比较中文时没有意义
//使用十六进制计算器
在字符串中使用转义字符输入Unicode编码表
在网页中使用Unicode编码表
&#编码;这里的编码需要的是10进制
相等运算符用来比较俩个值是否相等 如果相等会返回true,否则会返回false —当使用==来比较俩个值时,如果值的类型不同 则会自动进行类型转换,将其转换为相同的类型 不相等用来判断俩个值是否不相等,如果不相等返回true,否则返回false — 使用!=来做不相等运算 — 不相等也会对变量进行自动的类型转换,如果转换后相等也会返回false — 用来判断俩个值是否全等,它和相等类似,不同的是它不会做自动的类型转换 如果来个值得类型不同,直接返回false — 用来判断俩个值是否不全等,和不等类似,不同的是它不会做自动类型转换 如果来个值得类型不同,直接返回true 所以这俩个值做相等判断时,会返回true NaN不和任何值相等 包括他本身 //NaN不和任何值相等 所以下面的这个方法行不通 可以通过isNaN()函数来判断一个值是否是NaN 如果该值是NaN则返回true,否则会返回false
条件运算符也叫三元运算符
条件表达式?语句1:语句2;
条件运算符在执行时,首先对条件表达式进行求值,
如果该值为true,则执行语句1,并返回执行结果
如果该值为false,则执行语句2,并返回执行结果
如果条件的表达式的求值结果是一个非布尔值,
会将其转换为布尔值然后在运算
二十五、运算符的优先级
使用,可以分割多个语句,一般可以在声明多个变量时使用 //使用,运算符同时声明多个变量 //可以声明多个变量并赋值 就和数学中一样,在js运算符也有优先级 在js中有一个运算符优先级的表 在表中越靠上优先级越高,优先级越高越优先计算 如果优先级一样,则从左往右计算 但是这个表我们不需要记忆,如果遇到优先级不清楚 如果||的优先级高,或者俩个一样高,则应该返回3 如果与的优先级高,则应该返回1 我们的语句是由一条一条语句构成的
语句是按照自上向下的顺序一条一条执行的
在js中可以使用{}来为语句进行分组
同在一个{}中的语句我们称为是一组语句
它们要么执行,要么都不执行
一个{}中的语句我们也称为代码块
在代码块的后面不用在编写;了
js中的代码块,只具有分组的作用,没有其他的用途
代码块内部的内容,在外部是完全可见的
二十七、if语句(一) — js中的程序是从上到下一行一行执行的 — 通过流程控制语句可以控制程序执行流程 使流程可以根据一定的条件来选择执行 — 使用条件判断语句可以在执行某个语句之前进行判断 如果条件成立才会执行语句,条件不成立则语句不会执行 if语句在执行时,会先对条件表达式进行求值判断 如果条件表达式的值为true,则执行if后的语句 如果条件表达式的值为false,则不会执行if后的语句 if语句只能控制紧随其后的那个语句 如果希望if语句可以控制多条语句 可以将这些语句统一放到代码块中{} if语句后的代码块不是必须的,但是在开发中尽量写上代码块,即使if后只有一条语句
二十八、if语句(二)
当该语句执行时,会先对if后的条件表达式进行求值判断 如果该值为true,则执行if后的语句 如果该值为false,则执行else后的语句 当该语句执行时,会从上到下依次对条件表达式进行求值判断 如果该值为true,则执行当前语句 如果该值为false,则继续向下判断 如果所有的条件都不满足,则执行最后一个else后的语句
二十九、if练习(一)
从键盘输入小明的期末成绩
当成绩为100时,奖励一俩BMW
当成绩为[60-80]时,奖励一本参考书
其他时,什么奖励也没有
prompt()可以弹出一个提示框,该提示框中会带有一个文本框
用户可以在文本框中输入一段内容,该函数需要一个字符串作为参数
该字符串将会作为提示框的提示文字
用户输入的内容将会作为函数的返回值返回,可以定义一个变量来接收该内容
//根据score的值来决定小明什么奖励
大家都知道,男大当婚女大当嫁,那么女方家长要嫁女儿,当然要提出一定的条件 如果三个条件同事满足,则'我一定要嫁给你' 如果三个条件有为真的情况,则:'嫁吧,比上不足,比下有余' 如果三个条件都不满足,则:'不嫁' //如果三个条件同事满足,则'我一定要嫁给你'(同时满足用于&&) //如果三个条件有为真的情况(有一个满足用或||),则:'嫁吧,比上不足,比下有余' alert("嫁吧,比上不足,比下有余");
三十一、if练习(三)
编写程序,由键盘输入三个整数分别存入变量num1,num2,num3
对他们进行排序,并且从小到大输出
条件分支语句也叫switch语句
在执行时会依次将case后的表达式的值和switch后的条件表达式的值进行全等比较
如果比较结果为true,则从当前case处开始执行代码
当前case后的所有代码都会被执行,我们可以在case的后面跟着一个break关键字
这样可以确保只会执行当前case后的语句,而不会执行其他的case
如果比较结果为false,则继续向下比较
如果所有的比较结果都为false,则只执行default后的语句
switch语句和if语句的功能实际上有重复的,使用switch可以实现if的功能
同样使用if也可以实现switch的功能,所以我们使用时,可以根据自己的习惯选择
//根据num的值,输出对应的中文
// 这俩中方法差不多
三十二、条件分支语句练习(二)
从键盘接收整数参数,如果该数为1-7,打印对应的星期,否则打印非法参数
三十二、条件分支语句练习(一)
对于成绩大于60分的,输出'合格'。低于60分的,输出'不合格'
三十三、while循环
向页面中输出连续的数字 通过循环语句可以反复的执行一段代码多次 while(条件表达式){ -while语句在执行时, 先对条件表达式进行求值判断 如果值为true,则执行循环体 循环体执行完毕后,继续对表达式进行判断 如果为true,则继续执行循环体,以此类推 如果值为flash,则终止循环 do...while语句在执行时,会先执行循环体
循环体执行完毕以后,在对while后的条件表达式进行判断 如果结果为true,则继续执行循环体,执行完毕继续判断以此类推 如果结果为false,则终止循环 实际上这俩个语句功能类似,不同的是while是先判断后执行 do...while可以保证循环体至少执行一次
//向这种将条件表达式写死为true的循环,叫做死循环
//该循环不会停止,除非浏览器关闭,死循环在开发中慎用
//可以使用break,来终止循环
//创建一个循环,往往需要三个步骤
// 1.创建一个初始化的变量
//2.在循环中设置一个条件表达式
//3.定义一个更新表达式,每次更新初始化变量
} // 输出为换行的数字
三十四、while循环练习
假如投资的几年利率为5%,试求从1000块增长到5000块,需要花费多少年 //定义一个变量,表示当前的钱数 (代码解析) //定义一个while循环来计算每年的钱数三十五、while练习(一) 使用if练习一
//score就是小明的期末成绩
//判断用户输入的值是否合法
//满足该条件则证明用户的输入合法,退出循环
//根据score的值来决定小明什么奖励
for语句,也是一个循环语句,也称为for循环
在for循环中,为我们提供了专门的位置用来放三个表达式:
for(初始化表达式;条件表达式;更新表达式){
for循环的执行流程:
1.执行初始化表达式,初始化变量(初始化表达式只能则执行一次)
2.执行条件表达式,判断是复执行循环
3.如果为true,则执行循环
如果为false,则终止循环
4.执行更新表达式,更新表达式执行完毕继续重复执行
//创建一个执行10次的while循环
for循环中的三个部分都可以省略,也可以写在外部
如果在for循环中不写任何表达式,只写俩个;
此时循环是一个死循环会一直执行下去,慎用
三十七、for循环练习(一)
打印1-100之间所有奇数之和
//创建一个变量,用来保存奇数之和 //不能被2整除的数就是奇数(==是偶数 !=是奇数) //如果i除以2有余数则证明i是奇数
三十八、for循环练习(二)
打印1-100之间的所有7的倍数的个数及总和
//3.定义一个变量来保存组合
//5.定义一个计数器,来记录数量
//2.判断i是否是7的倍数(输出7的倍数)
三十九、for循环练习(三)
水仙花数是指一个3位数,它的每个位上的数字的3 次幂之和等于它本身
//先打印所有的三位数
//获取i的百位 十位 个位的数字 //判断i是否是水仙花数在页面中接收一个用户输入的数字,并判断该数是否是质数
质数:只能被1和它自身整除的数,1不是质数也不是合数,质数必须是大于1的自然数
//判断这个值是否合法
//创建一个变量来保存当前的数的状态
//默认当前num是质数
//判断num是否是质数
//判断num是否能被i整除
//如果num能被整除,则说明num一定不是质数
//如果 num是质数则输出
四十一、嵌套的for循环
通过程序,在页面中输出如下的图形 //向body中输出一个内容 //通过一个for循环来输出图形 //这个for循环执行几次,图形的高度就是多少 //它可以用来控制图形的高度 //在循环的内部创建一个循环,用来控制图形的宽度 //目前我们的外部的for循环执行1次,内部的就会执行5次 //内层循环可以来决定图形的宽度,执行几次图从的宽度就是多少 //最终输出一个5*5的*矩形 //最终输出一个梯形的*四十二、for循环练习(一)
//创建外层循环,用来控制乘法表的高度
//创建一个内层循环来控制图形的宽度
加span用来使每列每行对齐
四十三、for循环练习(二)
打印出1-100之间所有的质数
1不是质数所以直接打印2-100的质数
//创建一个布尔值,用来保存结果,默认i是质数
//创建一个布尔值,用来保存结果,默认i是质数
//获取到2-i之间的所有的数
//判断i是否能被j整除
//如果进去判断则证明i不是质数,修改flag值为false
//如果是质数则打印i的值
break关键字可以用来退出switch或循环语句
break关键字,会立即终止离他最近的那个循环语句
//测试如下的程序的性能
//在程序执行前,开启计时器
//它需要一个字符串作为参数,这个字符串将会作为计时器的标识
//打印2-100之间所有的数
//创建一个布尔值,用来保存结果,默认i是质数
//获取到2-i之间的所有的数
//判断i是否能被j整除
//如果进去判断则证明i不是质数,修改flag值为false
//一旦进入判断,则证明i不可能是质数了,此时循环在执行已经没有任何意义了
//如果是质数则打印i的值
//console.timeEnd()用来停止一个计时器,需要一个计时器的名字作为参数
//可以通过Math.sqrt()对一个数进行开方 (可以进行优化)
- 以上五种类型属于基本数据类型,以后我们看到的值 只要不是上边的5种,全都是对象 值和值之间没有任何的联系 如果使用基本数据类型的数据,我们所创建的变量都是独立,不能成为一个整体 对象属于一种复合的数据类型,在对象中可以保存多个不同数据类型的属性 - 由ES标准中定义的对象,在任何的ES的实现中都可以使用 - 由JS的运行环境提供的对象,目前来讲主要指由浏览器提供的对象 - 由开发人员自己创建对象 使用new关键字调用函数(),是构造函数constructor(new后面的英文首字母大写) 构造函数是专门用来创建对象的函数 使用typeof检查一个对象时,会返回object 在对象中保存的值称为属性 对象.属性名=属性值; 如果读取对象中没有属性,不会报错而是会返回underfined 语法:对象.属性名 = 新值
四十七、属性名和属性值
- 对象的属性名不强制要求遵守标识符的规范 什么乱七八糟的名字都可以使用 - 但是我们使用还是尽量按照标识符的规范去做 如果要使用特殊的属性名,不能采用.的方式来操作 语法:对象["属性名"] = 属性值 读取时也需要采用这种方式 使用[]这种形式操作方法,更加灵活 在[]中可以直接传递一个变量,这样变量值是多少就会读取那个属性 js对象的属性值,可以是任意的数据类型 - 通过该运算符可以检查一个对象中是否含有指定的属性 如果有则返回true,没有则返回false四十八、基本数据类型和引用数据类型
js中的变量都是保存到栈内存中的 基本数据类型的值直接在栈内存中储存 值与值之间是独立存在,修改一个变量不会影响其他的变量 对象是保存到堆内存中的,没创建一个新的对象,就会在堆内存中开辟出一个新的空间 而变量保存的是对象的内存地址(对象的引用),如果俩个变量保存的是同一个对象引用 当一个通过一个变量修改属性时,另一个也会受到影响 当比较俩个基本数据类型的值时,就是比较值 而比较俩个引用的数据类型,它是比较的是对象的内存地址 如果俩个对象是一模一样的,但是地址不同,它会返回false