1.基础语法
2.JavaScript
2.1简介:
JavaScript是一种具有面向对象能力的、解释型的程序设计语言。更具体一点,它是基于对象和事件驱动并具有相对安全的客户端脚本语言。他的目的主要是,验证发往服务器的数据、增加Web互动、加强用户体验度等
2.1.1JavaScript
2.2 JS的基本用法
- 行内JS: 将JS代码写在html标签上
- 内部JS: 写在html页面中script标签中
- 外部JS: 创建JS文件,通过script标签引入JS文件
- JS放置位置:
- 放在header标签中
- 放在body中
- 放在body后(推荐)
JS代码从上往下依次执行,等到html元素执行完毕之后在执行JS代码
console.log(“”)打印在控制台
3.JavaScript基础语法
3.1语句和语法
- JavaScript程序的执行单位为行(line),也就是一行一行地执行。一般情况下,每一行就是一个语句。
- 语句(statement)是为了完成某种任务而进行的操作,语句以分号结尾,一个分号即表示一个语句结束。多个语句可以写在一行内(不建议这么写代码),但是一行写多条语句时,语句必须以分号结尾。(JS是一种弱类型语言,如果没有;亦可能不会报错,建议写上)
- 表达式不需要分号结尾。一旦在表达式后面添加分号,则JavaScript引擎就将表达式视为语句,这样会产生-些没有任何意义的语句。
- 单行注释:用//起头
- 多行注释:放在/* 和*/之间
- 兼容html的注解<!- - - ->
3.2表示符合关键字
标识符就是一个名字,用来给变量和函数命名,有特定的规则和规范
规则:
- 由Unicode字母、_、$、数字组成、中文组成
- 不要以数字开头
- 不能试关键字和保留字(关键字又称保留字,是被JavaScript征用来有特殊含义的单词)
- 严格区分大小写
规范
- 见名知意
- 驼峰命名或者下划线规则
3.3变量:
- JS是一种弱类型语言,在声明变量时不需要指明数据类型,直接使用Var修饰符声明变量
- 变量的声明
- 声明并赋值
- 先声明后赋值
- 变量注意点:
- 当变量声明未赋值时,则变量的值会返回unfinded
- 变量要有定义才能使用,若变量未声明就使用,JavaScript会报错,告诉你变量未定义。
- 可以再一个Var中声明多个变量
- 若使用var重新声明一个已经存在的变量,是无效的。
- 若使用var重新声明一个已经存在的变量且赋值,则会覆盖掉前面的值
- JavaScript是一种动态类型、弱类型语言,也就是说,变量的类型没有限制,可以赋予各种类型的值。
3.3.3变量提升
- JavaScript 引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升。
注:只有用var声明的变量,才会变量声明。
3.4 数据类型
- 虽说lS是弱类型语言,变量没有类型,但数据本身是有类型的。针对不同的类型,我们可以进行不同的操作。
- JavaScript 中有6种数据类型,其中有五种简单的数据类型: Undefined、Null、布尔、数值和字符串。一种复杂数据类型Object。
3.4.1.undefined
- undefined类型的值是undefined。
- undefined是一个表示"无"的原始值,表示值不存在。
- 出现undefined的常见情况:
- 当声明了一个变量而没有初始化时,这个变量的值就是undefined
- 调用函数(方法)时,函数有形参,但未提供实参,则参数为undefined
- 函数没有返回值时,默认返回undefined。
3.4.2.null
- null类型是只有一个值的数据类型,即特殊的值null。它表示空值,即该处的值现在为空,它表示一个空对象引用。
- 使用Null类型值时注意以下几点:
- 使用typeof操作符测试null返回Object字符串。
- undefined派生自null,所以等值比较返回值是true。未初始化的变量和赋值为null的变量相等。
3.4.3.布尔类型
- 布尔类型有两个值: true、false。常用来做判断和循环的条件
3.4.4.数值型
- 数值型包括:整型和浮点型
- 所有数字(整型和浮点型)都是64位浮点类型存储。所以在JS中1与1.0是相等的,1+1.0=2
- 浮点型的最高精度是17位,浮点类型运算是可能不准确,不建议利用浮点型做判断
- 在存储数值时会自动将整型的浮点数值(1.0)转换成整型 (1)
3.4.5字符串
- 使用 ’ '或" "引起来,如: ‘hello’,“good”。
- 使用加号’+‘进行字符串的拼接,如:console.log(‘hello’+ ’ everybody’);
3.4.6对象
- 对象是一组数据和功能的集合。
3.5类型转换
3.5.1自动类型转换
3.5.2函数转换(String to Numer)
- JS提供了parseInt()和parseFloat()两个全局转换函数。前者把值转换成整数,后者把值转换成浮点数。只有对String类型调用这些方法,这两个函数才能正确运行;对其他类型返回的都是NaN(Not a Number)。
- 3.5.2.1.parselnt():
- 在转换之前,首先会分析该字符串,判断位置为0处的字符,判断它是否是个有效数字,如果不是,则直接返回NaN,不再继续,如果是则继续,直到找到非字符。
- 3.5.2.2.parseFloat()
- 该方法与parseInt()方法的处理方式相似,从位置О开始查看每个字符,直到找到第一个非有效的字符为止,然后把该字符之前的字符串转换成数字。不过,对于这个方法来说,第一个出现的小数点是有效字符。如果有两个小数点,第二个小数点将被看作无效的,parseFloat()方法会把这个小数点之前的字符串转换成数字。
3.5.3.显示转换
几乎每个数对象都提供了toString()函数将内容转换为字符串形式,其中Number提供的toString()函数可以将数字转换为字符串。
Number还提供了toFixed()函数将根据小数点后指定位数将数字转为字符串,四舍五入
- JS为Number、Boolean、String对象提供了构造方法,用于强制转换其他类型的数据。此时操作的是整个数据,而不是部分。
最后一种强制类型转换方法String()是最简单的,因为它可把任何值转换成字符串。要执行这种强制类型转换,只需要调用作为参数传递进来的值的 toString()方法,即把1转换成"1",把 true转换成"true ",把false转换成"false ",依此类推。强制转换成字符串和调用toString()方法的唯一不同之处在于,对null或undefined值强制类型转换可以生成字符串而不引发错误:
3.6运算符
3.6.1.算术运算符
3.6.2.赋值和扩展运算符
3.6.3.比较运算符
3.6.4.逻辑运算符
3.6.5.三目运算符
3.7.控制语句
- 我们写的JavaScript代码都是按照从上到下依次执行,很多时候我们希望代码按照我们的意愿去执行,比如有选择性地执行某些代码,或者重复地执行某些代码,这就需要使用到流程控制语句。
- 流程控制语句一共有三种:
- 流程执行:从上到下,从左到右
- 选择执行:分支选择
- 循环执行:重复执行
3.7.1.选择
- 3.7.1.1.单选择:
- 首席执行条件:
- 如果结果为true,则执行语句体;
- 如果结果为false,则结卖if语句。
注意:若语句体只有一条语句,可以省略大括号,但不建议省略
3.7.1.2.双选择:
- 首席执行条件:
- 如果结果为true,则执行语句体1;
- 如果结果为false,则执行语句体2。
3.7.1.4switch结构
- 多个if…else且值为定值时(即=在比较运行结果时,采用的是严格相等运算符(=),而不是相等,运算符(==),这意味着比较时不会发生类型转换。),可以使用switch替换:
- break防止穿透,如果没有break,则继续执行后面的代码,直到遇到 break或全部执行完毕,但是有些时候会利用穿透。
3.7.2.循环
- 循环结构用于重复执行某个操作简单理解就是重复执行同类型的代码,它有多种形式。
3.7.2.1.while
- 先判断后执行
3.7.2.2.do…while
- 先执行后判断,至少执行一次
3.7.2.3for
3.7.2.4死循环
- 条件永远成立,永远为true,则会产生死循环,下面是最简单的死循环
3.7.2.5.break与continue
- break:停止本层循环
- continue:暂停本次循环,继续下一次
- 数组是按次序排列的一组数据,每个值的位置都有编号(从0开始),整个数组用方括号表示。
3.8.1.数组的定义:
- JS中定义数组的三种方式如下(也可先声明再赋值)∶
3.8.2.基本操作
- 数组的长度可以通过length属性来获取,并可以任意更改
- 数组中的每一个元素都可以被访问和修改,甚至是不存在的元素,无所谓越界
for—>不遍历属性
foreach—>不遍历属性和索引中的undefined
for in —>不遍历索引中的undefined
push 添加元素到最后
unshift 添加元素到最前
pop 删除最后一项
shift 删除第一项
reverse 数组翻转
join 数组转成字符串
indexOf 数组元素索引
slice 截取(切片)数组,原数组不发生变化
splice 剪接数组,原数组变化,可以实现前后删除效果
concat 数组合并
函数,即方法。就是一段预先设置的功能代码块,可以反复调用,根据输入参数的不同,返回不同的值。函数也是对象。
3.9.1.函数的定义
有三种函数定义的方式:函数声明语句、函数定义表达式、Function构造函数
3.9.1.1.函数声明语句
function 函数名([参数列表]){
}
例如:
function foo(){
conso1e.log(1);
}
foo();
该种方式定义的函数具有声明提升的效果
foo();
function foo(){
console.log(1);
}
//变量声明提升
conso1e.log( a );
var a = 2 ;
这种写法将一个匿名函数赋值给变量。这时,这个匿名函数又称函数表达式,因为赋值语句的等号右侧只能放表达式。
3.9.1.2.Function构造函数
Function构造函数接收任意数量的参数,但最后一个参数始终都被看成是函数体,而前面的参数则列举出了新函数的参数。
var add = new Function( 'x ','y ' , 'return (x +y) ');
//等同于
function add(x,y) {
return (x + y);
}
add();
注:
1.如果使用函数声明语句这种方式声明函数,会具有函数名提升的效果。
2.JS中方法没有重载,如果出现同名方法则覆盖。
3.9.2.1.参数
函数运行的时候,有时需要提供外部数据,不同的外部数据会得到不同的结果,这种外部数据就叫参数,定义时的参数称为形参,调用时的参数称为实参
- 实参可以省略,那么对应形参为undefined
- 若函数形参同名((一般不会这么干)∶在使用时以最后一个值为准。
- 可以给参数默认值:当参数为特殊值时,可以赋予默认值。
- 参数为值传递,传递副本﹔引用传递时传递地址,操作的是同一个对象。
//实参可以省略,那么对应形参为undefined
function fn(str) {
console.log(str); // undefined
}
fn();
//若函数形参同名(一般不会这么干):在使用时以最后一个值为准。
function fn2(a,a) {
console.log(a);
}
fn2(1,2);
//可以给参数默认值:当参数为特殊值时,可以赋予默认值。
function fn3(a) {
a = a ll "a";return a;
}
var a1 = fn3();
console.log(a1);
var a2=fn3(100);
console.log( a2);
Arguments 只在函数内部定义,保存了函数的实参
Array 数组对象
Date 日期对象,用来创建和获取日期
Math 数学对象
String 字符串对象,提供对字符串的一系列操作
3.10.1.String
charAt(idx) 返回指定位置处的字符
indexof(chr) 返回指定子字符串的位置,从左到右。找不到返回-1
substr(m, n) 返回给定字符串中从m位置开始,取n个字符,如果参数n省略,则意味着取到字符串末尾。
substring(m,n) 返回给定字符串中从m位置开始,到n位置结束,如果参数n省略,则意味着取到字符串末)
toLowercase() 将字符串中的字符全部转化成小写。
touppercase() 将字符串中的字符全部转化成大写。
length 属性,不是方法,返回字符串的长度。
3.10.2. Math
Math.random() 随机数
Math.cei1() 向上取整,大于最大整数
Math.f1oor() 向小取整,小于最小整数string
对象(object)是JavaScript的核心概念,也是最重要的数据类型。JavaScript 的所有数据都可以被视为对象。JavaScript提供多个内建对象,比如String、Date、Array等等。对象是带有属性和方法的特殊数据类型。
简单说,所谓对象,就是一种无序的数据集合,由若干个"键值对”(key-value)构成。通过JavaScript我们可以创建自己的对象。JavaScript对象满足的这种"键值对"的格式我们称为JSON格式,以后会见得非常多,即伟大的JSON对象。
3.11.1.对象的创建
创建自定义对象,主要通过三种方式:字面量形式创建对象、通过new Object对象创建、通过Object对的create方法创建对象。
3.11.1.1.字面量形式创建
var对象名={;//创建一个空的对象var对象名={键:值,键2:值2,...}
var obj = {
' name' : 'he11o ',
age : 12,
sayHe11o : function {
conso1e.1og("我是对象中的方法");
},
courses : {
javase : 4,
javascript : 3
},
isLike : true,members : [
{name : "小红", age : 203,
{name : "小绿" , age : 22},
{name : "小蓝", age : 27},
{name : "小黄"}
]
};