JS基础(一)数据

一、数据类型

任何编程语言都少不了数据类型,javascript的数据类型包含基本数据类型和引用数据类型

基本数据类型:string,number,bool,undefined,null,symbol

引用数据类型:object(function,Array,Date,RegExp...)

不同点:1、基本数据类型是存在栈内存中,按值传递,例:var a = 3,var b = a; b = 4; //a=3,b=4

2:引用数据类型的值存储在堆内存中,地址(指向堆中的值)存储在栈内存中,按引用传递,即:

把对象赋值给另外一个变量的时候,复制的是地址,指向同一块内存空间,当其中一个对象改变时,另一个对象也会变化。

注意:1、另外symbol是es6新增的数据类型,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突,真实值类似于字符串

通过new symbol('abd')来定义变量

2、typeof null 返回的值是 object,但是null不是对象,而是基本数据类型的一种

二、强制数据类型转换

    JavaScript是弱数据类型,在以下两种情况下会进行强制数据类型转换

  • 在使用==进行判断时,会将等式两边的数据进行数据类型转换。

console.log(1==2)//false
console.log('a'=='a'); //true
console.log(1=='a')//false
console.log(true == true)//true
console.log(true == 1)//true
console.log(true == '1'); //true
console.log(true==''//false
console.log(1=='1'//true

(1)等式两边类型相等时,会直接判断值是不相等

(2)等式两边类型不相等时且等式两边数据类型为Bool、String、Number,会将等式左右两边进行Numeber的强制化数据类型转换 如:[]==![] 为true

 

  • 在if判断时,括号内的值进行类型转换,转化为布尔值

所以了解如下特殊转换,除了以下数据判断会返回false,其它的任何数据判断都是返回true

Boolean(undefined) //false

Boolean(null) //false

Boolean(''//false;

Boolean(NaN) //false;

Boolean(0)//false

三、类型检测

1、typeof

typeof只能检测出基本数据类型,引用数据类型除了能检测出function,其它检测出的都是Object,另外需注意的是typeof输出的是字符串,如:typeof  typeof  [2,3]  //string

2、instanceof

能通过[2,3]  instanceof  Array 能判断出引用类型的具体数据类型,instanceof 是通过原型链判断的,A instanceof B, 在A的原型链中层层查找,是否有原型等于B.prototype,如果一直找到A的原型链的顶端(null;即Object.prototype.__proto__),仍然不等于B.prototype,那么返回false,否则返回true.

Instanceof 实现原理:

function instance_of(L,R){

var O = R.prototype;

L = L.__proto__;

while(true){

    if(L === null){

        return false;

    }

    if(L == O) return true;

    L = L.__proto__;

}

}

 

四、运算符

1、一元操作符

前置型递增(递减)和后置型递增(递减),区别就是:后置递增(递减)是在包含包含它们的语句被求值后才执行,如下:

var num1 = 1,num2 = 2;num3 = 1;

var num4 = ++num1 + num2 ;

console.log(num4,num1) // 4 2

var num5 = num2 + num3++;

console.log(num5,num3) // 3 2

另外一点需要注意的就是,前置后置一般都应用于Number类型,那在其他类型是什么样的结果呢?

var a ='a'

console.log(++a) // NaN

a ='1'

console.log(++a) // 2

a = false

console.log(++a) // 1

a = 1.1

console.log(++a) // 2.1

可知,非数字类型的数据会先转换为数字类型然后进行递增(递减)。

2、逻辑与&&

逻辑与左右都为布尔值时,遵循如下真值表:

第一个操作符

第二个操作符

结果

true

true

true

true

false

false

false

true

false

false

false

false

逻辑与可以应用于任何类型的操作数,当有一个操作数不是布尔值时,逻辑与返回的就不一定是布尔值了,遵循的规则如下:

  1. 如果第一个操数是对象,则返回第二个操作数
  2. 如果第二个操作数是对象时,则只有第一个操作数的求值为true时,才会返回该对象
  3. 如果两个操作数都是对象,则返回第二个操作数
  4. 如果一个操作数为null,则返回null,
  5. 如果一个操作数是NaN,则返回NaN,
  6. 如果有一个操作数是undefined,则返回undefined

总结:A,如果2个操作数非Boolean类型,则返回第二个操作数

B1,如果第一个操作数为Boolean类型,true返回第二个操作数,为false返回false

B2,如果第二个操作数为Boolean类型,返回第二个操作数

 

3、逻辑或||

逻辑与左右都为布尔值时,遵循如下真值表:

第一个操作符

第二个操作符

结果

true

true

true

true

false

true

false

true

true

false

false

false

与逻辑与操作相似,如果一个操作数不是布尔值,逻辑或也不一定返回布尔值,它遵循如下规则:

(1)如果第一个操作数是对象,则返回第一个操作数

(2)如果第一个操作数的求值结果为false,则返回第二个操作数

(3)如果2个操作数都是对象,则返回第一个操作数

(4)如果一个操作数为null,则返回null,

(5)如果一个操作数是NaN,则返回NaN,

(6)如果有一个操作数是undefined,则返回undefined

与逻辑与操作符相似,逻辑或操作符也是短路操作符,也就是说如果第一个操作数的求值结果为true,就不会对第二个操作数求值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值