Js基础
Js中有7种类型(ES6后新增一种)分别为
1.数值(Number)
2.字符串(string)
3.布尔值(Boolean)
4.undefined
5.null
6.object
7.Symbol (这个一个es6种用来指定唯一标记的东西)
其中object又可以分为
狭义(object)
数组(array)
方法(function)
判断配型的方法有3种分别为
1.typeof
typeof 无法区别array和object需要使用instanceof
let dom1 = 1;
let dom2 = '233';
let dom3 = true
let dom4 = undefined;
let dom5 = null;
let dom6 = { a: 1 }
let dom7 = [{ a: 1 }, { a: 1 }]
let dom8 = function a() { }
console.log(typeof a); // undefined typeof可以比较没有赋值的参数
console.log(typeof dom1); //number
console.log(typeof dom2); //string
console.log(typeof dom3); //boolean
console.log(typeof dom4); //undefined
console.log(typeof dom5); //object
console.log(typeof dom6); //object
console.log(typeof dom7); //object
console.log(typeof dom8); //function
2.instanceof
//只等于new 出来的
let dom1 = 1;
let dom2 = '233';
let dom3 = true
let dom4 = new Number(1);
let dom5 = new String('233');
let dom6 = new Boolean(true);
console.log(dom1 instanceof Number); //false
console.log(dom2 instanceof String); //false
console.log(dom3 instanceof Boolean);//false
console.log(dom4 instanceof Number); //true
console.log(dom5 instanceof String); //true
console.log(dom6 instanceof Boolean); //true
//function 不等于 object
let dom7 = function ss() { }
let dom8 = new dom7();
let dom9 = new dom7();
console.log(dom7 instanceof Function); //true
console.log(dom8 instanceof dom7); //true
console.log(dom8 instanceof Function); //false
console.log(dom8 instanceof Object); //true
//可以判断继承
let dom10 = function s1() { }
let dom11 = function s2() { }
dom10.prototype = new dom11();
let dom12 = new dom10();
console.log('--------------------');
console.log(dom12 instanceof dom10); //true
console.log(dom12 instanceof dom11); //true
3.Object.prototype.toString.call
//可以很好的判断一个object是否为数组
let dom1 = 1;
let dom2 = '233';
let dom3 = true
let dom4 = undefined;
let dom5 = null;
let dom6 = { a: 1 }
let dom7 = [{ a: 1 }, { a: 1 }]
let dom8 = function a() { }
console.log(Object.prototype.toString.call(dom1));//[object Number]
console.log(Object.prototype.toString.call(dom2));//[object String]
console.log(Object.prototype.toString.call(dom3));//[object Boolean]
console.log(Object.prototype.toString.call(dom4));//[object Undefined]
console.log(Object.prototype.toString.call(dom5));//[object Null]
console.log(Object.prototype.toString.call(dom6));//[object Object]
console.log(Object.prototype.toString.call(dom7));//[object Array]
console.log(Object.prototype.toString.call(dom8));//[object Function]
Boolean类型的判断,以下几种数据都会返回false其他都为true
1.undefined
2.null
3.''或者""
4.false
5.NAN
6.0
[]和{}显示为true
let dom1 = false
let dom2 = undefined;
let dom3 = null;
let dom4 = NaN;
if (!dom1) {
console.log('false is false');
}
if (!dom2) {
console.log('undefined is false');
}
if (!dom3) {
console.log('null is false');
}
if (!dom4) {
console.log('NaN is false');
}
if (!'') {
console.log("'' is false");
}
if (!0) {
console.log("0 is false");
}
if ([]) {
console.log("[] is true");
}
if ({}) {
console.log("{} is true");
}
数值
1. js的所有数值都是64位浮点数 要小心计算
2.数值的进值表达
十进值 无前导
8进值 0O
16进值 0X
2进值 0B
3.NAN类型
字符串转换错误会得到NAN
NAN不等于任何值 包括自身
和NAN计算都是NAN
NAN的类型还是number
[].indexof(NaN)返回-1
if (NaN != NaN) {
console.log("NAN不等于NaN")
}
var a = 5 - NaN;
console.log(`和NAN计算还是${a}`);
var b = [NaN].indexOf(NaN);
console.log(`数组NaN indexOf为${b}`);
4. 和数值有关的全局方法
parseInt
//parseInt的返回值只有两种可能,要么是一个十进制整数,要么是NaN。
//转字符串
var dom1 = parseInt('111');
console.log(dom1);
//能过滤空格
var dom2 = parseInt(' 222 ');
console.log(dom2);
//从左到后一个个转换如果后续的不能转换返回已经转换好的数值
let dom3 = parseInt('22xa2');
console.log(dom3);
//如果从左开始第一个就不能转换则返回NaN
let dom4 = parseInt('x3333');
console.log(dom4);
//如果按照0X开头按照16进值解析返回10进值
let dom5 = parseInt('0X23');
console.log(dom5); //35
//可以接收第二个参数 用来进值转换 范围2-36
let dom6 = parseInt('1000', 2);
let dom7 = parseInt('1000', 8);
let dom8 = parseInt('1000', 16);
console.log(dom6);//8
console.log(dom7);//512
console.log(dom8);//4096
//如果第二个参数不在2-36种返回NaN 如果第一个参数不能符合第二个参数的进值返回NaN
let dom9 = parseInt('1000', 37);
let dom10 = parseInt('3000', 2);
console.log(dom9);
console.log(dom10);
parseFloat
//能转换一个浮点型字符串
let dom1 = parseFloat('3.14')
console.log(dom1);//3.14
//可以转科学计数法的字符串
let dom2 = parseFloat('314e-2');
console.log(dom2);//3.14
//能过滤空格
var dom3 = parseFloat(' 3.222 ');
console.log(dom3);//3.222
//从左到后一个个转换如果后续的不能转换返回已经转换好的数值
let dom4 = parseFloat('3.14xasd');
console.log(dom4);//3.14
//如果从左开始第一个就不能转换则返回NaN
let dom5 = parseFloat('a3.14xasd');
console.log(dom5);//NaN
isNaN
//判断一个数是否为Nan
let dom1 = isNaN(233);//false
let dom2 = isNaN(NaN);//true
console.log(dom1);
console.log(dom2);
//如果传入的不是数字 则会先转为数字并做判断 如果传入的不能转为数字也是NaN
let dom3 = isNaN('aaa');
let dom4 = isNaN({});
console.log(dom3);//true
console.log(dom4);//true
//以下几个传入会得到false
let dom5 = isNaN([]);
let dom6 = isNaN([123]);
let dom7 = isNaN(['123']);
let dom8 = isNaN('');
console.log(dom5);//false
console.log(dom6);//false
console.log(dom7);//false
console.log(dom8);//false
//所以使用的时候最好判断下类型
function MyIsNaN(value) {
return typeof value === 'number' && isNaN(value);
}
//或者使用NaN不等于自身的特性
function MyIsNaN(value) {
return value !== value;
}
isFinite
//以下几个会返回false 其他都返回true
//NaN undefined Infinity -Infinity
//还有传入后转为以上几个类型的
let dom1 = isFinite(NaN);
let dom2 = isFinite(Infinity);
let dom3 = isFinite(-Infinity);
let dom3 = isFinite(undefined);
console.log(dom1);//false
console.log(dom2);//false
console.log(dom3);//false
console.log(dom4);//false
字符串
//字符串可以看成一个字符数组 但不能按照数组的样子修改
let dom1 = 'hello'
for (var i = 0; i < dom1.length;i++) {
console.log(dom1[i]); //分别打印h e l l o
}
//es6种可以这样反转字符串
var dom2 = [...dom1].reverse().join('');
console.log(dom2); //olleh
object
//如果属性的key是数字类型的不能用.必须用[] []里可以有表达式
let dom1 = {
123: 5,
dom123:10
}
console.log(dom1[123]); //5
console.log(dom1['dom' + '123']); //10
//查看所有属性
let dom2 =
{
key1: 1,
key2: 2,
key3:3
}
console.log(Object.keys(dom2));// ["key1", "key2", "key3"]
//delete 删除属性 无论是否含有删除的属性 都返回true 除了只读返回false 并且不能删除继承的属性
let dom3 = {
key:5
}
let res = delete dom3.key;
console.log(res);
//in 判断属性是否在其中 但不能判断是否是继承的
let dom4 = {
p: 2
}
console.log('p' in dom4);//true
console.log('a' in dom4);//false
//for ... in 遍历全部属性包括继承的属性
let dom5 = {
key1: 10,
key2: 20,
key3:30
}
for (var i in dom5)
{
console(i);
}
数组
//什么都可以放进数组
//本质是一个特殊的数组typeof 返回 object 特殊在于key是连续的数字
//数组的lenght 返回数组的个数 可以修改
let dom1 = ['a', 'b', 'c'];
console.log(dom1.length);//3
//如果设置比数组原本小的值会导致数组清楚长度超过的值
let dom2 = ['a', 'b', 'c', 'd']
dom2.length = 2;
console.log(dom2)//['a','b']
//如果length 设置查过原本的数组个数 会增加数组长度 增加的位置为空
let dom3 = ['a', 'b'];
dom3.length = 5;
console.log(dom3);//undefined
//for...in 可以遍历数组 但也会遍历数组的非数字键
//可以使用forEach遍历数组
let dom4 = ['1', '2', 'a', 'f'];
dom4.forEach(x => {
console.log(x);
})//'1', '2', 'a', 'f'
//数组的空位 2个逗号中不存在任务东西 就是空位
let dom5 = ['1', , '2'];
//读取空位返回undefined
console.log(dom5[1])//undefined
//delete 删除的数组内容会变空位 返回undefined
let dom6 = ['1', 'a', '4', '3'];
delete dom6[2];
console.log(dom6[2])//undefined
//空位会被 for...in forEach等遍历略过
let dom7 = ['1', 'a', , '3'];
for (var v in dom7) {
console.log(v); //1,a,3
}
dom7.forEach(x => {
console.log(x);//1,a,3
})

浙公网安备 33010602011771号