(可理解为一个容器,容器存储数据,变量临时存储在内存中,程序关闭,内存释放)
变量
- var 声明定义变量
- 变量名称
变量命名:数字 字母 下划线 $(不推荐) 严格大小写
不能以数字开头 不能用关键字,保留字
- = 赋值符号
- 表达式 执行结果是具体的数值数据
- ;每行代码以;结束
变量的作用域变量的作用范围
全局变量:定义在函数外的变量,函数内外都能调用
全局变量污染:(绝对杜绝!)
在函数内部对全局变量赋值:
在函数内 如果没有变量a,但对a有赋值a=100;
赋值语句升级为变量的声明语句
例:函数test中的age变量前面没有使用 var 声明,解释器会认为它在test的上一层定义的,如果在上一层未有找到定义,它的“父亲”它会依次向上寻找直到找到了window这个祖先,此时age会被挂载到window对象下成为一个全局变量
var name = zhangshan; function test(){ age = 20; }
局部变量:定义在函数内的变量/形参,只在函数内能调用
数据类型(变量没有数据类型,变量存储的数据才有数据类型)
基本数据类型
布尔类型:bool(返回true/false)
字符串类型:str/string(数字 字母 符号组成的一串数据,其内容要用定界符(' ' , " " , ‘ ’ )包裹)
var str1='true'; //在变量中存储字符串类型'true' t r u e四个字符
定界符:单引号双引号不能嵌套自身 (实际项目若不需解析,则推荐使用单双引号)
不能换行,不能解析变量
字符串中没有代码运算,只输出字符 解决方式:document.write('内容'+a+'内容')
解决方式console.log(eval('1+2'));//eval会将字符串按照js程序运行
反引号支持换行(document.write中界面显示空格,console中显示换行)
可以解析变量:用${}包裹变量 document.write(’内容${a}内容‘)
支持运算 document.write(’${1+2}‘)
低版本ie不支持
数值类型:
整数(正负整数 0):int/integer
整数进制存储(输入)方式,默认为十进制
二进制 在数值前添加 0b/0B
八进制 在数值前添加 0o/0O
十六进制 在数值前添加 0x/0X
输出默认为十进制,可按以下方式指定进制输出
js整数的安全范围,若整数位数超出安全范围,则产生误差
浮点数(正负小数):float
有效数值:整数+小数 (左起非0的数字开始计算,最多17位,超出部分四舍五入保留)
浮点数的 误差 / 溢出 / 精度丢失:
js中 浮点数以近似值的形似存储,计算时会有误差 / 溢出 / 精度丢失(有时会体现 有时不会)
例 :0.5 存储的是0.500000002
浮点数的比较判断:因为浮点数的误差 / 溢出 / 精度丢失存在,若使用浮点数直接运算比较,执行结果出错
科学计数法:属于浮点数的表示方式 不管其最终执行的数值是多少 都是浮点型2e6 3e-1
NaN(Not a Number):运算结果是数值类型但不是一个具体的数字 例:console.log('北京-100'),可以作为数值直接赋值
!有NAN参与的运算 执行结果还是NAN
!两个NaN比较的结果永远是false
=== 全等比较 判断 === 两侧内容 数据类型和数值 都相同结果是 true 不同结果是 false
null 空值
undefined 没有正确赋值 给了变量但没有赋值
判断数据类型
typeof()
整数,浮点数,科学计数法 ,NAN 执行结果都是 number
null,数组,对象执行结果都是object
Object.prototype.toString.call()
null 数组 对象 都可以区分数据类型 [object Null] [object Array] [object Object]
整数 浮点数 科学计数法 NaN 还是[object Number]
数据类型转化(弱类型 :一个变量可以存储任意类型的数据)
数据转化方式
自动转化/隐式转化(程序执行时自主完成转化)
自动转化为字符串类型
什么时候转化:字符串拼接时 数据类型自动转化为字符串 (从左到右按照顺序拼接 先乘除后加减)
自动转化为数值类型
什么时候转化:执行算术运算时 参与运算的必须是数值类型
转化原则:true —— 1
false —— 0
null —— 0
undefined —— 无确定值 返回NAN
空字符串‘’、纯空格字符串‘ ’ —— 0
不符合数字语法规范——返回NAN 例:console.log(100-'北京')
只有加号’+‘执行拼接,其他运算符都只执行算术运算
自动转化为布尔类型
什么时候转化:if判断 逻辑运算 三元运算
转化原则:0 0.000.... null undefined NAN ' ' 转化为 false
其他都转化为 true
强制转化(人为)
转化原则与自动转化相同
强制转化为布尔类型 :Boolean(变量/数值) 转化的结果可以用变量存储
var int2 = 9; var res1 = Boolean(int2);//true
强制转化为字符串类型:
String( 变量 / 数值 ) 变量.toString()
只有变量可以用,如果变量存储的是整数,还可以用此函数进行进制转换 ,进制范围是 2 - 36,null和undefined不支持
强制转化为数值类型:
parseInt() 从左起符合整数语法规范 获取整数部分(若左起第一个内容不符合整数规范,则转化为 NAN)
parseFloat() 获取浮点数(保留小数,只能识别一个小数点)
Number() 转化为对应数值 若是不符合数值规范 则转化为NAN
! 注:parseInt不能识别科学计数法 parseFloat可以
console.log(parseInt('2e4')) // 被看作字符串 返回2
console.log(parseFloat('2e3')) // 可以识别科学计数法 返回2000 console.log(parseInt(2e4)) //返回20000
console.log(parseFloat(2e3) //可以识别科学计数法 返回2000 console.log(parseFloat(9.89.09)//9.89
引用数据类型/复杂数据类型
JavaScript三大调试方式 (js的调试方式,不是最终执行方式,是暂时查看程序执行结果的方式)
window.alert(内容/变量) / alert()
window.prompt(‘内容’) 输入框 输入数据 !
document.write(内容/变量)
console.log() 一次可以输出多个数据,用逗号间隔
var a = 100; var b = 2;
window.alert(a)/alert();//解析变量a中的数据 输出到提示/警示框中
document.write('内容')//在页面中显示
console.log(a,b);//在页面控制台的console中显示