条件循环语句,数据类型检测

本文详细介绍了JavaScript中的条件语句,包括if、if-else和else-if的用法,并探讨了while、do-while和for循环的区别。此外,还深入讲解了数据类型检测的方法,如typeof、instanceof、constructor以及object.prototype.toString.call(),并指出了它们在检测上的特点和局限性。
摘要由CSDN通过智能技术生成

javascript阶段二(条件循环语句,数据类型检测)

一、条件语句

if

if是最基本的判断语句,条件成立则执行if函数。

var a = 5,
var b ,
if(a = b){
console.log(b);
}

if-else

if-else判断语句

var a=5;
var b;
if(a==b){
  alert("b=5");
}else {        //如果a1=b则执行下面内容
   alert("b1=5");
}

else-if

这是if语句的多重if,在用于多种情况的时候使用。

var a=5;
var b;
var c;
var d;
var e;
if(a==b){
  alert("b=5")
}else if(a==c){     
  alert("c=5")
}else if(a==d){
  alert("d=5")
}else if(a==e){
  alert("e=5")
}else{
  alert("b1=5、c1=5、d1=5、e1=5")
}

if语句比较简单

二、循环语句

while循环

语法

while(条件表达式){
执行语句-单表达式布尔值为ture的时候执行此语句
}

while主要用于不知道要循环多少次的情况

do while循环

语法结构

do{
条件表达式为突然时执行的语句
}while(条件表达式)

do while与while循环的不同之处就是要先执行一次do语句,在使用while条件表达式来判断是否为ture,如果是true继续循环,false跳出循环。
do while至少执行一次循环,看实际情况使用

for循环

语法结构

for(变量初始值;条件表达式;变量更新){
执行语句:条件表达式为true的时候执行
}

循环次数知道的情况可以使用for循环,一般用于遍历。
先判断条件,后执行循环主体

三种循环的区别:
for和while循环都是先判断条件然后执行语句,通过条件语句布尔值为false直接跳过,
do while语句先执行一次语句在进行条件判断

三、数据类型检测

数据类型检测方法

四种:
typeof
instanceof
constructor
object.prototype.toString.call()

typeof

typeof是一元运算符,返回一个字符串类型,用来判断变量是否为空或者其类型
注:typeof不能判断null和object。其他都可以正确返回

typeof undefined // 'undefined'
typeof '10' // 'String' 
typeof 10 // 'Number' 
typeof false // 'Boolean' 
typeof Symbol() // 'Symbol' 
typeof Function // ‘function' 
typeof null // ‘Object’
 typeof [] // 'Object'
typeof {} // 'Object'

对象在底层的储存是用二进制表示的,在js中,如果二进制的前三位都是0,系统会判定为object类型,null二进制是000,所以系统判定null为object类型

其他类型底层储存标志位
000 :对象类型。
1 :整型,数据是31位带符号整数。
010 :双精度类型,数据是双精度数字。
100 :字符串,数据是字符串。
110 :布尔类型,数据是布尔值。

instanceof

instanceof运算符用来测试一个对象在原型链中是否存在一个构造函数prototype属性,可以用instanceof来判断某个对象是不是另外骗一个对象的实例

function Foo(){}
var f1 = new Foo();
console.log(f1 instanceof Foo);// true

constructor

对于引用类型,可以使用xx.constructor.name构造函数来判断。

// constructor 构造来判断 
console.log(fn.constructor.name) // Function
 console.log(date.constructor.name)// Date
  console.log(arr.constructor.name) // Array 
  console.log(reg.constructor.name) // RegExp

object.prototype.toString.call()

这是最好的基本类型检测方式;object.prototype.toString.call(),可以区分出所有基本类型

// 判断基本类型 
Object.prototype.toString.call(null); // "[object Null]" 
Object.prototype.toString.call(undefined); // "[object Undefined]" 
Object.prototype.toString.call(“abc”);// "[object String]" 
Object.prototype.toString.call(123);// "[object Number]" 
Object.prototype.toString.call(true);// "[object Boolean]" 
// 判断引用类型 
function fn(){ 
console.log(“xiaolu”); 
}
var date = new Date(); 
var arr = [1,2,3]; 
var reg = /[hbc]at/gi;
 Object.prototype.toString.call(fn); // "[object Function]" 
 Object.prototype.toString.call(date); // "[object Date]" 
Object.prototype.toString.call(arr); // "[object Array]"

缺点是不能细分谁是谁的实例

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十九万里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值