1. 数据类型
这是 (' ')空白字符串 " "之间有空格
NaN 非数字(not a number)属性是代表非数字值的特殊值该属性用于指示某个值不是数字,如果有非数值参与计算,结果就是 NaN。
1.1 数字类型(number):
- 整数 : 100, -100, 234
- 浮点数 : 100.234, -0.456
- 科学记数法 : 10e5
- 其他进制表示
- 二进制 : 0b100
- 八进制 : 0o100
- 十六进制 : 0x100
- 非数字 : NaN
1.2 字符串类型(string): 在 JS 中, 只要是引号包裹的内容, 统称为字符串
字符串类型
被引号包裹的所有内容都是字符串,这里的引号可以是单引号也可以是双引号也可以是反引号
var str1 = 'qwer'
var str2 = '!@#$%'
var str3 = '10086'
var s5=`小花今年的年龄是${s42}岁`
var s5=`小花今年的年龄是${s42+20}岁`
1.3 布尔类型(boolean): 表明 对/错(真/假)
布尔类型
true 真 在计算机存储的数值是1
false 假 在计算机存储的数值是0
1.4 undefined类型 (undefined): 表明未定义, 通常我们不会给一个变量赋值为 undefined,因为 变量定义但不赋值就是一个 undefined
var und1 = undefined
1.5 null类型(null): 表明为 空对象指针 (空), 一般很少使用, 但是如果创建了一个对象, 但是不知道对象的值是什么的时候可能会给一个 null 就是和对象联动
var nul = null
对象:object
undefined类型 与null 类型的区别
var a1
console.log(a1)
var a2=null
console.log(a2)
* 2. 复杂数据类型 (引用数据类型) 之一
2-1: 函数 function
2-2: 数组 array
2-3: 对象 object
2-4: 时间 date
...
数据类型检测
* 为什么要检测类型?
* 在 JS 中, 一个变量内部保存的值 是可以任意更改的
*
* 所以在使用的时候为了放置 因为数据类型不对, 导致的错误, 所以需要在使用前 检测一下数据的类型
console.log(Object)
console.log(Object.prototype)
console.log(Object.prototype.toString)
console.log(Object.prototype.toString.call([]))
console.log(Object.prototype.toString.call([]))
console.log(Object.prototype.toString.call({}))
console.log(Object.prototype.toString.call(100))
console.log(Object.prototype.toString.call('100'))
console.log(Object.prototype.toString.call(undefined))
console.log(Object.prototype.toString.call(null))
console.log(Object.prototype.toString.call(function () { }))
console.log(Object.prototype.toString.call(true))
console.log(Object.prototype.toString.call(/\d/))
isNaN()
可以使用 isNaN 这个方法来判断一个变量是不是一个合法的数字
var a1='你好'
var a2=123
var a3='123'
console.log(isNaN(a1))
console.log(isNaN(a2))
console.log(isNaN(a3))
数据类型转换 转数值
* JS 转换的时候 任意类型都能够转换为数字使用, 主要是字符串转数字
*
*
* 1. 借助一个 转型函数 Number(数据)
转型函数Number()可以用于任何数据类型,将其他数据类型转为数字
*
* 2. parseInt(数据)
* 3. parseFloat(数据)
*
* 4. 开发中很有效的方式(转为数字类型)
* 变量/数据 - 0(可以保留小数部分)
var box = '10086.233'
console.log(box)
console.log(box - 0)
console.log(typeof(box - 0))
var box = '10086'
console.log('box 原本的数据类型', typeof(box), box)
var newBox = Number(box)
console.log('box 通过转型函数转换后的值', typeof(newBox), newBox)
console.log(Number(''))
console.log(Number(' '))
console.log(Number('qwertyui'))
console.log(Number("123456789.233"))
console.log(Number(true))
console.log(Number(false))
console.log(Number(undefined))
console.log(Number(null))
var a={a:1,b:2};
a=Number(a);
console.log(a);
console.log(parseInt(100))
console.log(parseInt(100.666))
console.log(parseInt(''))
console.log(parseInt(' '))
console.log(parseInt('!@#$%^&'))
console.log(parseInt('qwerty'))
console.log(parseInt('qwerty10086'))
console.log(parseInt('10086qwerty'))
console.log(parseInt('10086qwe999rty'))
console.log(parseInt('100'))
console.log(parseInt('100.10086'))
parseFloat:符串转浮点数方法
console.log(parseFloat(255)) 整数
console.log(parseFloat(255.233)) 带小数
console.log(parseFloat('22.22')) 带小数
console.log(parseFloat('22')) 整数
console.log(parseFloat('')) NaN
console.log(parseFloat(' ')) NaN
console.log(parseFloat('ssvsv'))NaN
console.log(parseFloat('2.5bfb')) 显示小数2.5
console.log(parseFloat('bfb2.22')) NaN
转布尔类型
空字符 0 false NaN null undefined '' 这六个转换为布尔值都是false
除此以外转换后都是true
一般开发的时候不会主动的转换布尔类型
一般是隐式转换, 也就是由 JS 帮我们完成了数据的转换, 一般做判断的时候比较常见
1. 借助一个转型函数 Boolean(变量/数据)
2. !!变量/数据
一个! 表示得到这个数据取反后的布尔值
console.log(!undefined)
console.log(!!undefined)
console.log(!0)(这里变为了真)
console.log(Boolean(0))
console.log(Boolean(1))
console.log(Boolean(-1))
console.log(Boolean(100))
console.log(Boolean(-10000))
console.log(Boolean(1.567))
console.log(Boolean(''))就是他(false)
console.log(Boolean(' '))
console.log(Boolean('1234567'))
console.log(Boolean('!@#$'))
console.log(Boolean('qwerts'))
console.log(Boolean('你好!@#$%qwert12345'))
console.log(Boolean(undefined))
console.log(Boolean(null))
转字符串类型
* 1. 变量/数据.toString()
* 问题: undefined 和 null 不能使用
*
* 2. String(变量/数据)
* 什么类型都能转换为 字符串
*
* 3. 变量/数据 + ''
* 原理讲到 运算符的时候再说
*/
var box = 100
console.log('box 原本的值: ', typeof (box), box)
console.log('box 转换数据类型后: ', typeof (box.toString()), box.toString())
console.log(typeof(true), typeof(true.toString()))
console.log(true, true.toString())
console.log(typeof(false),typeof(false.toString()))
console.log(undefined.toString())
var und = undefined
console.log(und)
console.log(und.toString())
console.log(null.toString())
var o={a:1,b:2};
var o={a:10,b:20};
o=String(o);
console.log(o);
任何对象,不管里面什么属性,什么值,在使用String强制转换为字符串以后都会变成 "[object Object]" 字符串
console.log(typeof(undefined), typeof(String(undefined)))
console.log(typeof(null), typeof(String(null)))
console.log(typeof(String(100)))
console.log(typeof(String(true)))
console.log(typeof(undefined) ,typeof(String(undefined)))
console.log(typeof(String(true)))
var sd = 100;
console.log(sd.toString());
toString()在括号外面,注意要用变量而不是值;
console.log(true. toString());
console.log(String(sd));
console.log(typeof(String(undefined)));
console.log(typeof(undefined), typeof(undefined + ''))
console.log(typeof(null), typeof(null + ''))
console.log(typeof(undefined),typeof(undefined + ''))
打出来是个对象:object
console.log(typeof(null),typeof(null + ''))
console.log(typeof(true),typeof(true + ''))
var sd = 100;
console.log(sd) 直接用数字也行
console.log(233.23 + '')
console.log(typeof(sd),typeof(sd + ''))
console.log(undefined + '')
var a=3.456;
a=a.toFixed(fractionDigits)
a=a.toFixed(2);
console.log(a);
js运算符
- * / % ** 都是按照算术运算符计算,如果符号两端的值不是数值类型,将会自动转换为数值并且计算
这种自动转换类型我们叫做隐式转换
console.log("10"/2);
console.log("5"*true);
console.log(10*null);
var a;
console.log(a*3);
console.log(1 + 1) 结果为2
console.log(undefined + null) NaN
console.log(1 + '1') 结果是11
插入字符串
var div1=document.getElementById("div1");
var a=1;
var b=2;
var c=3;
div1.innerHTML="<ul><li>"+a+"</li><li>"+b+"</li><li>"+c+"</li></ul>"
字符串插入变量,在要插入的部分输入一对双引号,双引号中两个+号,然后再两个加号之间输入
变量
console.log(100 - 50)
console.log('100' - 50)
赋值运算符
/**
* = 赋值号
*
* += 当要给一个变量重新赋值, 赋值为他本身加一个内容, 就可以使用 +=
*/
// +=
var a = 100
// a = a + 500
a += 500
console.log(a)
// -=
var b = 100
// b = b - 50
b -= 50
console.log(b)
// *=
var c = 10
// c = c * 10
c *= 10
console.log(c)
// /=
var d = 9
d /= 3
console.log(d)
// %=
var q = 9
q %= 4
console.log(q)
比较运算符
* 大于 >
* 小于 <
* 大于等于 >=
* 小于等于 <=
*
* 等于
* == 比较是否相等 先把等号两端值转换为相同的类型,然后再比较是否相等
=== 比较是否绝对相等 先比较等号两端类型是否相等,如果相等,在比较值是否相等
* 一定要注意, 等于 最少要两个 == 千万不要写成 =
*
* 不等于
* != 对比两边是否不相等, 不会区分数据类型
* !== 对比两边是否不相等, 区分数据类型 推荐写 !==
console.log(100 > 99) // true
console.log(100 < 99) // false
console.log(100 < 100) // false
console.log(100 > 100) // false
console.log(100 >= 100) // true
console.log(1 == 1) // true
console.log(1 === 1) // true
console.log(1 == '1') // true
console.log(1 === '1') // false
console.log(100 != 100)
console.log(100 != 99)
console.log(100 !== 100)
console.log(100 !== '100') // 因为区分数据类型, 所以 条件成立, 返回 true
console.log(100 != '100') // 不区分类型, 条件不成立, 返回 false
// 0 "" false 使用==比较时相同
console.log(0==false)
console.log(0=="")
console.log(false=="")
// undefined和null 使用==比较时相同
console.log(undefined==null)
// 任何数与NaN都是不相同的,包括NaN自己
console.log(NaN==NaN)
// isNaN和Number.isNaN isNaN会自动将里面的值转换为数值后再判断是否是NaN,而Number.isNaN直接判断里面的值是不是NaN
var a="a"
// 如果将a转换为数值后,是不是NaN
var b=isNaN(a)
console.log(b)
var a="A"
a=Number(a)
var b=Number.isNaN(a)
console.log(b) // true 表示变量a是NaN
// 判断两个值是否绝对相等 等同于===
console.log( Object.is(3,3))// true
var a=3
var b=3
console.log(Object.is(a,b))
var a="a"
a=Number(a)
var b=Object.is(a,NaN)
console.log(b)
> >= < <=
错误就是false 正确就是true
console.log(a>b)
var c=a>b
console.log(c)
console.log(a>=b)
console.log(a<b)
console.log(a<=b)
字符串比较,先转换为unicode编码,然后比较编码值
var a="a"
var b="b"
console.log(a>b)
console.log(a<b)
如果第一个字符的编码相同,则比较第二个字符的编码
var a="ab"
var b="ac"
console.log(b<a)
优先转换为数值,然后比较 NaN和任何值都无法比较 无论怎么比都是false
var a=undefined
var b=null
console.log(a>b)
console.log(a<b)
var a=10
var b=null
var c
console.log(a>b)
console.log(a>c)
如果对象和某个值比较,另一个值是字符串,对象转换为"[object Object]" 然后比较。
如果另一个是数值,则对象转为数值NaN
var a="["
var b={}
console.log(a>b)
console.log(a<b)
var o={a:4}
var b=5
var b="5"
NaN>5 NaN<5 false
"[object Object]">"5"
课下小练习
// 作业一
var num = 3 - '36' % 5 + '2' - 2
console.log(num)
// 先乘除后加减,从左到右加减
// 先36除5取余数1,在从左到右加减,3减1等于2,2与'2'拼接为22,最后减去2等于20.
// 作业2
var abc = 123.456789
*
* 需求:
* 书写一段代码, 让 abc 保留两位小数, 值为 123.45
1. var abc = 123.456789
bbc = 123.45
abc = bbc
console.log(abc)