js数据相关简单的问题与理解
2019-10-31 本文已影响0人
ClayChan
Q:
js数据类型?
A:
原始类型:number、string、boolean、特殊类型(null&undefined)
// 不区分整型和浮点数值
var a = 1; // number类型
var b = 1.1; // number类型
// ""和''均可构成字符串
var c = "hello"; // 双引号内文本构成字符串
var d = 'world'; // 单引号内文本构成字符串
// true和false为布尔值
var e = true;
var f = false;
// null和undefined均为特殊类型
var g = null;
var h = undefined;
对象类型:array、function&object
Q:
==和===的区别?
A:
原始类型值的比较是值的比较:
它们的值相等时它们就相等(==);
它们的值和类型都相等时它们就恒等(===)。
console.log( false == 0 ) //true
console.log( false === 0 ) //false
部分值会在布尔值转换的时候被转换为false,但是并不意味着它们和false相等
undefined
null
0
-0
NaN
"" // 空字符串
console.log( undefined == true ) //false
console.log( undefined == false ) //false
console.log( undefined == null ) //true
console.log( undefined === null ) //false
console.log( null == false ) //false
console.log( null == true ) //false
console.log( "" == false ) //true
console.log( "" == true ) //false
console.log( 0 == false ) //true
console.log( 0 == true ) //false
console.log( -0 == false ) //true
console.log( -0 == true ) //false
Q:
null和undefined的区别?
A:
null:正常的或在意料之中的值的空缺
undefined:出乎意料的或类似错误的值的空缺
Q:
Infinity和NaN
A:
Infinity:表示无限大,超过JS的number所能够表示的最大值。
NaN:表示not a number,无法计算的结果。
// NaN与任何值都不相等,包括它自身
console.log( NaN == NaN ) //false
// 识别NaN的方法
console.log( isNaN(NaN) ) //true
Q:
为什么两个空数组不相等?
var a = [], b = [];
console.log( a == b ); //false
A:
对象类型的比较和原始类型不同(原始类型见上Q),对象的比较并非值的比较,而是引用的比较:
对象:包含同样的属性及相同的值的两个对象,它们也是不相等的
数组:各个索引元素完全相等的两个数组,它们也是不相等的
var a = { n : 1 }, b = { n : 1 }; //同样属性&相同的值
console.log(a == b); //false
var c = [], d = []; //单独的空数组
console.log( c == d ); //false
对象类型一般我们称为引用类型,区别于基本类型,对于对象值的使用我们都是采用了引用的方式--reference,所以只有在引用对象为同一对象时,它们的值才会相等
var a = []; //定义a来引用一个空的数组
var b = a; //定义b来引用同一个数组
console.log(a == b); //true
b[0] = 1; //调用变量b来修改数组
console.log(a[0]); //1,因为引用的是同一个数组,所以a也会改变