javascript深入浅出——数据类型和表达式、运算符

本文深入解析JavaScript中的六种数据类型,包括原始类型和对象类型,探讨隐式转换、包装对象、类型检测及表达式和运算符的使用。通过实例说明不同类型之间的转换和比较,以及如何利用各种运算符进行计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、数据类型

1、六种数据类型

(1)原始类型

number(数字)、string(字符串)、boolean(布尔值)、null和underfined。

(2)对象类型

object(对象){   function(函数)、Array(数组)、Date(日期)  }

2、隐式转换

“37”-7 //30 此处'-'为减法运算  “37”+7  //377 “+”为字符串拼接

(1)严格等于 

a === b  类型不同返回false。

new Object ≠new Object    对象的比较是用  引用去比较而不是值去比较

例:【1,2】==【1,2】返回false。因为不是他同一个对象,同样两个空对象也不会相等。

(2)等于

若类型相同,和‘===’一样

若不同,尝试类型转换和比较

例:“1.23” == 1.23   当等号一边是字符串一边是数字时,会尝试把字符串转化为数字再进行比较。

boolean ==?   把布尔值先转换为数字 object==? 把对象转换为基本类型。

3、包装对象

string/number/boolean三个基本类型有对应包装类型,在把这几个基本类型当作对象使用时,js会创建一个对应的临时包装对象,然后进行操作,操作完毕后会消除临时对象,基本类型依然是基本类型,并无变化。

例:var a='string';  alert(a.length); //6    a.t = 3;  alert(a.t) //undefined

4、类型检测

(1)typeof    适用于基本类型和函数对象   遇到null会返回object

(2)instanceof    适合判断对象类型(基于原型链判断)        在不同的iframe和window之间检测时失效

instanceof 期望左操作数是对象(obj),若不是直接返回false,右操作数必须是一个函数对象或函数构造器,若不是会抛出一个type error异常。原理是判断左操作数的对象的原型链上是否有 右边构造函数的prototype属性。

任何一个构造函数都有一个prototype对象属性,将用作使用 new 构造函数 这样的方式去构造出对象的原型

(3)Object.prototype.toString     适用于基本类型和数组、函数

例:Object.prototype.toString.apply([])    ie6/7/8 null和undefined失效

二、表达式和运算符

1、表达式

表达式是指能计算出值的任何可用程序单元。   ——Wiki

表达式是一种js短语,可使js解释器用来产生一个值。——js权威指南

(1)原始表达式:常量、直接量、关键字、变量

(2)复合表达式:两个原始表达式之间加一个运算符  例:1+1

(3)数组、对象的初始化表达式:  例:【1,2】 =  new Array(1,2);

(4)函数表达式:匿名的函数赋给一个变量,或者把函数括起来直接调用

(5)属性访问表达式:   例: var o ={x:1};           o.x       o【‘x’】

(6)调用表达式: 函数名加上一个括号调用。  func();

(7)对象创建表达式:  用new建一个构造器或函数,可以传参。

2、运算符

根据操作数可分为一元:+num       二元:a+b     三元 :    c?a:b(判断c的布尔值是否为true,是取a,不是取b)

还有  赋值‘=’、比较‘==’、算数‘-’、位‘|’、逻辑‘&&’、字符串‘+’、特殊等等。。。

特殊的运算符:

(1)条件运算符 :   c?a:b

(2)‘,’运算符:  逗号运算符表达式的每一个元素都会被计算,但是最后取的值是逗号最右边的值

(3)'delete'运算符:删除对象上的属性。ie9开始有一个Object.defineProperty方法,可以设置一个configurable标签,为true表示可以被delete,false则不可以。

(4)'in'运算符:  判断对象中是否有某属性。   window.x =1;     'x' in window; //true

(5)'instanceof','typeof'运算符:instanceof是判断对象的类型,是基于原型链取判断。typeof返回的是字符串,一般常用于原始类型或对象。   例:{} instanceof Object  //true     typeof 100 === 'number' //true

(6)'new'运算符:  通过new可以创建一个构造器的实例(新的对象)。hasOwnProperty方法可以判断属性是对象上的还是对象的原型链上的。通过__proto__可以拿到对象的原型。

(7)'this'运算符: 在全局作用域下,this会指向window。在不同的情况有不同的值。

(8)'void'运算符:一元运算符,不管void后面的操作数是多少,最后都会返回undefined。

运算符优先级:。。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值