(本文为阮一峰js标准教程的学习笔记,旨在总结该教程中涉及的知识点大纲及个人所做的一些拓展,方便作为“目录”或者“大纲”复习和查漏补缺,详细内容请参见阮一峰教程原文)
**************第二章 数据类型*************
一、概述
js语言的每一个值都属于某一种数据类型
ES5六种,ES6七种(新增symbol类型)
*数值 number (包括整数和小数)
*字符串 string
*布尔 boolean true和false两个值
*undefined 表示未定义或不存在
出现场景是:声明变量未赋值,未声明直接引用会报错
*null 表示空缺,此处应该有一个值,但是目前为空
*(合成类型概念)对象object
-(狭义概念)对象object
-函数function(居然被视作一种数据类型,好吧我妥协,它可以做自定义对象生成器或者工厂函数)
-数组array
1、原始类型:number、boolean、string
2、合成类型:object(一个对象往往是多个原始类型的值的合成,可以看作是一个存放各种值的容器)
3、视作特殊:undefined、null
4、在不同技术文献中对“对象”的理解:
*广义“对象”,是出自面向对象编程思想中的一个概念,不局限于某一种编程语言,或者说,在不同的编程语言中都会有对应的语法构造来映射这种思想。
*js中狭义的对象概念:var a={};这种字面量直接写出的用大括号表示的就是个对象,很容易被小白理解,而不会与其他概念混淆;
*合成类型"对象"的概念:认为是各种值组合成的集合就是对象,是个合成类型。从该层面,数组,函数,狭义对象都可以被归为这个概念层面上的对象。
5、狭义的对象和数组是两种不同的值组合方式,而函数是封装了一堆语句、操作,包括值的声明,操作值等。
6、js把函数当做一种数据类型,可以赋值与传递;
用该门语言编程,灵活性duang~duang~d
7、js函数式语言本质【理解不深入】
8、原始类型的数据(number、string、boolean)也可用对象方式调用属性和方法,他们可以用作对象。
二、type of运算符
返回一个值的数据类型
alert(typeof 8)//number
1、js有三种方法确定一个值的类型
*typeof 运算符;
*instanceof 运算符
*Object.prototype.toString方法;
2.+原始类型:数值 字符串 布尔值 分别返回 number string boolean;
3.+函数: 返回 function;
4.遇到undefined 返回 "undefined"(返回的是个字符串);
alert(typeof(typeof v));//string
5.typeof 可检查是否声明变量而不报错
if(typeof v==="undefined"){
alert("v没有定义")
}
6、除此之外其他情况都返回object。
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
7、数组([])的返回的类型也是object,这表示在JavaScript内部,数组本质上只是一种特殊的对象。
8、由于历史原因(95版js),导致typeof null 返回object,不是说null就属于对象,本质上null是一个类似于undefined的特殊值。为兼容以前js代码而一直被保留了下来。
9、typeof 对数组array和狭义对象object都显示object;
instanceof可区分;
var a=[],b={};
a instanceof Array //true
b instanceof Array //false
三、null 和 undefined
1、null 与 undefined含义和用法基本相似,老实说,语法效果几乎没区别。
2、在if语句中,它们都会被自动转为false,相等运算符(==)甚至直接报告两者相等。
if (!undefined) {
console.log('undefined is false');
}
// undefined is false
if (!null) {
console.log('null is false');
}
// null is false
undefined == null
// true
3、谷歌公司开发的 JavaScript 语言的替代品 Dart 语言,就明确规定只有null,没有undefined!
4、历史遗留问题诞生的undefined和Null (糟糕的95年js)目前null和undefined基本是同义的,只有一些细微的差别。
5、语言设计时,类比java,null被设计成一个表示”无”的对象,转为数值时为0(根据C语言的传统,null被设计成可以自动转为0。);
undefined是一个表示”无”的原始值,转为数值时为NaN(是后来又设计的)。
Number(undefined) // NaN
5 + undefined // NaN
Number(null) // 0
5 + null // 5
6、JavaScript的标识名区分大小写,所以undefined和null不同于Undefined和Null(或者其他仅仅大小写不同的词形),后者只是普通的变量名。
7、null:表示空值,该处值现在为空;
出现场景:
调用函数时,某个参数未设置任何值,这时就可以传入null。比如,某个函数接受引擎抛出的错误作为参数,如果运行过程中未出错,那么这个参数就会传入null,表示未发生错误。
8、undefined表示“未定义”
出现场景:
// 变量声明了,但没有赋值
var i;
i // undefined
// 调用函数时,应该提供的参数没有提供,该参数等于undefined
function f(x) {
return x;
}
f() // undefined
// 对象没有赋值的属性
var o = new Object();
o.p // undefined
// 函数没有返回值时,默认返回undefined
function f() {}
f() // undefined
四、布尔值
1.俩关键字:false true;
2、会返回布尔值的运算符
*二元逻辑:&&且 ||或
*前置逻辑:!非
*相等运算符 === !== == !=
*比较运算符 > < >= <=
3、js预期某个结构内某位置应该是boolean 会自动转布尔
4、以下六个可悲转为false,其他true;
undefined;
null
false
0
NaN
""或''(空字符串)
5、[]、{}都会被转为true