基本数据类型
Number
var num = 123;/*数字*/ typeof num-> number
var num2 = 'abc' - 123;/*NaN*/ typeof num2-> number
console.log(isNaN(num2)); /*true*/
var num3 = Number.max_VALUE*2;/*infinity*/ typeof num3 -> number
String
var str = 'abc'; typeof str -> string
var str2 = '123'; typeof str2-> string
var str3 = 'abc' + 123; typeof str3-> string
Boolean
var a = true; typeof a ->boolean
Symbol
var sym = Symbol("sym"); typeof sym -> symbol
BigInt
用来表示大于2^53 - 1的整数
var a = BigInt(9007199254740992); typeof a ->bigint
Undefined
var a;
Null
var a = null; //判断null:a === null
typeof判断的不足
typeof除了array和null判断为object外,其他的都可以正常判断
引用数据类型
Object
1.内建对象
由ES标准中定义的对象,在任何的ES的实现中都可以使用
如:Math String Number Function Object
2.宿主对象
由JS运行环境提供的对象,目前来讲主要指由浏览器提供的对象
如:BOM(浏览器对象模型) DOM(文档对象模型)
3.自定义对象
由开发人员自己创建的对象判断对象:
console.log(Object.prototype.toString.call({obj}) === '[object Object]') //true
//新建对象
//方式一
var student=new Object();
//var student = {};
//增
student.name="张三";
student.age=20;
student.gender='男';
/*特殊属性名,对象[“属性名”] = 属性值;
object["123"]=1000;
object["hello"]="hahaha";*/
//改
student.age=19;
//删
delete student.gender;
//查
console.log(student.name);
/*查属性 "属性名" in 对象
查自有属性 对象.hasOwnPreperty(属性)*/
//方式二
var person={
name:"张三",
age:20,
gender:'男'
};
Function
函数中可以封装一些功能(代码),在需要是可以执行这些功能(代码)
typeof function(){} === 'function';
//创建一个函数对象
//方式一
var fun=new Function();
//方式二
function add(a,b){
return a+b;
}
//方式三
var fun=function(){
};
/*ES6中箭头函数
参数只有一个省略小括号,函数体只有一句return语句省略大括号
(参数) => {
}*/
Array
数组对象的作用是:使用单独的变量名来存储一系列的值。
typeof检测不出数组类型,用Array.isArray(arr);判断,返回值为布尔值
//创建数组对象
//方式一
var array1=new Array();
/*var array1=[];*/
//方式二
var array1=[1,2,3,4,5,6];
数据类型转换
转换成字符串
//方法一
//调用toString方法
var a=123;
//null和undefined没有toSting方法
var b=a.toString();
//方法二
//调用String()函数
var c=123;
var d=String(c);
//方法三
//连接空串 原理上是调用String()函数
var e=123;
var f=e+"";
转换成数值型
//方法一
//调用Number()函数
var a="123";
var b=Number(a);
//方法二 针对字符串
//parseInt()将一个字符串转换为一个整数
//parseFloat()将一个字符串转换为一个浮点数
var c="123px";
var d=parseInt(c);
//方法三
//变量-0 / 1*变量 / 正号
var e = '123';
var f = e - 0;
var f = 1 * e;
var f = +e;
转换成布尔型
//使用Boolean()函数
var a=123;
var b=Boolean(a);//数值型true,NAN是false
var c="123";
var d=Boolean(c);//非空字符串true
var e=null;
var f=Boolean(e);//false
var g=undefined;
var h=Boolean(g);//false
//对象也会转换成true
常见红字错误
错误类型SyntaxError
- Uncaught SyntaxError: Unexpected identifier
语法解析错误,可能是对象属性之间没有加逗号
- Uncaught SyntaxError: Unexpected end of input
语法解析错误:未预期的结束,缺少括号
- Uncaught SyntaxError: Unexpected token '}'
语法解析错误:未预期的符号,多了一个括号
- Uncaught SyntaxError: Identifier 'a' has already been declared
语法解析错误:标识符a已经被声明,let和const声明是变量不允许重复声明
错误类型ReferenceError
- Uncaught ReferenceError:a is not defined
引用错误:变量a未定义
- Uncaught ReferenceError:$ is not defined
引用错误:jQuery没有正确导入
错误类型TypeError
- Uncaught TypeError: Cannot read property 'a' of undefined
试图获取undefined、null的属性
- Uncaught TypeError: console.log(...) is not a function
console.log('a')
(function() {
console.log('立即执行函数')
})()
打印a后没有写分号,继续执行一次函数,问题出在分号上
错误类型RangeError
- Uncaught RangeError: Maximum call stack size exceeded
在函数调用时会产生一个函数调用栈,如果在递归的过程中超过上限则会产生错误