1.1 JavaScript的注释与分号
同C语言相同
-
// 意为 单行注释
-
/**/ 意为 多行注释
-
语句结束使用分号结束 ";"
1.2 JS语法
ECMAscript中的一切(变量,函数名和操作符)都区分大小写
JS的标识符
变量,函数,属性的名字或者函数的参数
命名规则:
- 由字母,数字,下划线或者$组成
- 不能以数字开头
- 不能使用关键字,保留字作为标识符
变量
ECMAscript的变量是松散类型(很灵活,可以保存任何类型的数据),可以说变量仅仅是一个用于保存值的占位符(类似%d,%f...)
变量的声明和赋值
变量声明
变量声明使用 var 操作符
语法:var 变量名;
变量一经声明,值变为undefined。
变量赋值
-
声明的同时赋值:var 变量名=值
-
先声明后赋值:变量名=值
-
声明多个变量,用逗号隔开:
var id="asd",name="kiki",age;
省略var声明的变量是全局变量(不建议)
JS的数据类型
五种简单数据类型:
undefined null boolean number string
一种复杂数据类型: object
typeof
功能:检测变量类型
| 语法 | type 变量或者type(变量) |
| 返回值 | 什么类型返回什么:string,number,boolen,object,undefined,function |
举个栗子:
使用typeof检测变量类型
结果:
结果为string(字符串)
测试语法
console.log() //在控制台中打印
例如:
然后在浏览器的开发者工具(审查元素)中点开console查看
打印出来变量name的值
Undefined
数据未赋值时的类型
这个类型只有一个值:undefined
说明:一般而言,不存在需要明显的吧一个变量设置为undefined值的情况(简单说就是默认的数据类型)
null
- null表示一个空对象指针
- 如果定义的变量准备在将来用于保存对象,那么最好将变量初始化为null。(简单说就是定义一个可以装任何类型的空盒子)
说明: undefined值派生自null值,所以undefined==null的返回结果为true
number
number:表示整数和浮点数
NaN
即非数值(not a number)是一个特殊的数值
- 任何涉及NaN的操作(例如NaN/10)都会返回NaN
- NaN与任何值都不相等,包括NaN本身
打印:数字 - 字符串,无法相减出数值
第一个显示出NaN,意思是本应打印数字但是没办法相减所以显示NaN
第二个显示number是因为typeof检测类型的作用,检测到“NaN”,他属于number类型,所以显示number
isNaN( )
-
语法:isNaN(n)
-
功能:检测n是否是“非数值”
-
返回:boolean值(两个值:true/false)
-
参数:参数n可以是任何类型(什么类型都能判断)
-
说明:isNaN( )对接收的数值,先尝试转换为数值,再检测是否为非数值
例如:
结果如下:
第一个为非数值返回“真”,另一个为假
另一个特性:
id虽然添加了双引号意为字符串,但仍显示为number
是因为:isNaN会尝试转换为数值,再检测是否为非数值
数值转换
有三个函数可以把非数值转换为数值:
- Number( )
- parseInt( ) 转为整型
- parseFloat( ) 转为浮点型
说明:
- Number( )可以用于任何数据类型
- parseInt( )和parseFloat( )则专门用于把字符串转换为数值
Number()
同C语言函数使用类似
结果
将字符串类型转换为数值
parseInt()
作用:转换为整型(提取整型)
原本打印出来是字符串“28asd”,经过parseInt()函数,转换为整型“28”
另一个例子:
这里他将十六进制转换为int型的15,并不是提取整型的0。
但是,它作用的变量值必须以数字开头
a由于是数字开头转换成功,b转换失败为NaN
parseFloat()
作用:转换为整型和浮点型(提却浮点型和整型)
从第一个字符开始解析,直至遇到一个无效的浮点数字符为止。
说明: parseFloat()与 parseInt()的区别:
第一个小数点有效 会忽略前导零(开头的0)
举个综合例子
这里的a有两个小数点并且以0开头
数字开头的“前导0”被省略,并且只识别到第二个小数点之前,后面小数点无效。然后parseInt只提取了整型“12”部分。
String
字符串:由双引号“ ”或者单引号' '表示
toString()和String()
- 语法:str.toString(),String(str)
- 功能:将str转换为字符串
- 返回值:str的一个副本
- 参数:str是要转换的内容,可以是数值,布尔值,对象和字符串。
- 说明:不明类型时,还可以用String()函数强制转换任何类型的值为字符串
例如:
变量a本来是number类型,通过转换字符串之后,显示仍为159但是类型变成string型。
变量b通过String()函数也转换成string型。
Boolean
用于表示真假的类型,即true表示真,false表示假
- 除0以外的所有数字,转换为布尔型都为true
- 除了“空的”之外的所有字符,(包括空格)转换为布尔型都为true
- null和undefined转换为布尔型为false
Boolean型的强制转换:Boonlean(变量);
表达式
算术操作符
默认返回number
算术操作符练习:
两个不同类型可以黏一起
不同类型会出现NaN,只有“+”不影响,“*”,“/”,“-” 都会出现NaN
虽然变量b是字符串,但是算数运算时会被自动转换为number型,为隐式 类型转换
赋值操作符
简单赋值:=
复合赋值:+=,-=,*=,/=,%=;
使用基本与C语言相同
比较操作符
> , < , >= , <= , == , === , != , !==
- ==:相等,仅比较值是否相等
- ===: 相等,比较值的同时比较数据类型是否相等
- !=:不相等,仅比较值是否不相等
- !==:不相等,比较值的同时比较数据类型是否不相等
返回值:Boolean(true或者false)
a大于b。a>b为true
c和d值不同,类型不同。==为false
e和f值相同,类型不同。===为false
g和h值相同。==为true
三元操作符
同C语言使用类似
举个栗子:
结果如下:
逻辑操作符
- && 与
- || 或
- !非
&&逻辑与
基本使用与C语言类似(两个条件同时满足)
使用:1. 会将第一个操作数转化为Boolean类型
2. 若转化后第一个操作数为true,则返回第二个操作值;否则返回第一个操作数的原始值
说明:在有一个操作数不少布尔值的情况,逻辑与操作就不一定返回值,此时他遵循下列规则(多个时遇到true往下走)
- 如果第一个操作数隐式类型转换后为true,则返回第二个操作数
一个为真,还需要看另一个情况
第一个a值“asd”为true,所以返回第二个操作数b的值“123”
- 如果第一个操作数隐式类型转换后为false,则返回第一个操作数
一个为假,不需要看另一个情况了
第一个操作数是false,返回第一个操作数的值。
- 如果有一个变量为null或NaN或undefined,则返回直接为null或NaN或undefined
||逻辑或
基本使用与C语言类似(至少一个条件成立)
说明:在有一个操作数不少布尔值的情况,逻辑与操作就不一定返回值,此时他遵循下列规则(多个时遇到false就往下走)
- 如果第一个操作数隐式类型转换后为true,则返回第一个操作数
一个为真,不需要判断另一个了
- 如果第一个操作数隐式类型转换后为false,则返回第二个操作数
第一个为假,需要看第二个情况
- 如果有两个变量都为null或NaN或undefined,则返回直接为null或NaN或undefined
a*b是NaN,a-b是NaN,所以最后返回为NaN
!逻辑非
说明:
- 无论操作数是什么数据类型,逻辑非都会返回一个布尔值
88的隐式转换为true
- !!同时使用两个逻辑非操作符时:
- 第一个逻辑非操作会给予无论什么操作数返回一个布尔值
- 第二个逻辑非是对该布尔值求反
其实就是原来的样子(取反再取反)
!(!0)就是先!0返回true,然后!返回false
!!的妙用
可以起到直接获得变量布尔值的作用
在js中新手常常会写这样臃肿的代码:
判断变量a为非空,未定义或者非空串才能执行方法体的内容。
var a;
if(a!=null&&typeof(a)!=undefined&&a!=''){
//a有内容才执行的代码
}
实际上我们只需要写一个判断表达:
if(!!a){
//a有内容才执行的代码...
}