您的当前位置:首页javascript里的条件判断_基础知识
广告

javascript里的条件判断_基础知识

2023-12-02 来源:六三科技网

JavaScript 是一种可以在浏览器中运行的脚本语言,是一种弱语言(相对于C,C#,JAVA而言),只要是计算机语言就会使用到条件判断式,而JavaScript作为一种“弱”语言,它的条件判断常常令人困惑不解,特别是有其它强语言编程经历的人来说,更是不可理喻!高手和无惑的人别取笑,我自己也曾经有一段时间郁闷过。先写一个例子吧: var s = "meizz"; if (s && s==true) { alert("Is true"); } 咱先不管上面的代码运行的结果正确与否,我给变量 s 赋的是字符型,而在后面的 if 条件判断式里是直接把变量 s 作为一个判断表达式写出的,若是在强语言里对字符型的变量要么是判断它的类型是否是字符型或者是判断这个变量的值是否等于某字符串,但在 javascript 里就是没有用类型判断(typeof)也没有值判断(==)而就是这么孤伶伶地在那里,就可以作为一个条件判断表达式。当然这种单独作为条件表达式不只是字符型变量,也可以是数字型变量,也可以是一个对象,也可以是一个函数或者方法等等。这就正是这种语法令人费解的地方。 我测试统计了一下:在 JavaScript 里,不为空 "" 的字符串、不为 0 的数字、不为 null 的对象、不为 undefined 的对象属性、布尔型 true,单独作为判断式里的一个表达式时 JavaScript 通通认定为真(true),反之则为假(false)。 原因为是JS脚本没有强变量类型,你前一句赋值 var s = "meizz"; 后一句你甚至马上可以写成 s = function(){}; ,中间没有任何的类型转换,而这些写法在强语言里是不可思议的,甚至是大逆不道的(根本就不支持这种语法),但在JS脚本里却是那么的自然。原因就是没有强制变量类型, 变量类型是动态的,也就是说变量本身是没有类型的,变量的值是有类型的。呵呵,这里扯到其它模块去了,嗯,关于变量类型我另外再写文章讨论吧。 说到这里,就不难理解 if (s && .....这句的判断式了,同样的道理,我甚至可以 function s(){} 然后再用 if (s && .... 或者 var s = document.getElementById("ObjectId"); if (s && .... 这样语法在JS脚本里都是没错的,至于判断的结果可以参考上面的那段统计结果。 现在再来讨论上面的那几句代码的运行结果,多个条件判断式的结果合成运行只有“与”和“或”,到于“非”因为它是一元运行符,只针对单个值,比如 if (!s) ... 至于条件式不只一个的时候条件式的结果只有与和或的运行。与(&&),或(||)。上面的那句条件式:if (s && s==true) 就是两个条件式的合成判断。至于与运算(只要一个值为false则值为false)或运算(只要一个值为true则值为true)这些运算细节我就不多说了,教科书比我的笔头强多了。现在来分析这个判断式:这是一个“与”运算。第一个判断式 s ,因为它的字符型值不为 "" ,在JS当然认为它等同于 true,第二个判断式是 s==true,显然这个不相等,值为 false,因为是“与”运算,当然整个条件判断式的结果是 false,所以不会运行 alert()。 第三,我这里说说几个很特殊的条件判断。在没有任何声明(var)和赋值的情况下,直接拿一个变量来判断JS会抛出一个变量未定义的错误出来。比如: if (ss) alert("条件判断结果为 true!"); 运行这句代码就会出错。因为这个变量 ss 从未被声明赋值过,这种情况不等同于上述的 null "" undefined。这种情况一般会发生在什么地方呢?一是自己写代码不小心未声明,二就是对网页里没有的控件进行操作直接用ID来操作的时候,比如 if (InputId.value!="") ... ,若是网页里根本就没有 id="InputId" 的文本框或者在执行这句脚本操作的时候这个文本框还没有被浏览器加载,那也就抛出变量未定义的错误。 结果的办法是:第一种情况用 typeof 判断。if (typeof(ss)=="undefined") alert("变量未定义"); ,第二种情况则不要直接使用ID来引用对象而使用标准的对象引用。例: var e = document.getElementById("InputId"); //IE里以前是用 document.all.InputId if (e && e.value!="") ;//...... 这样就不会出这种错误了。 那么就上面这句代码有人会说一定要这样写呢,为什么不直接 if(document.getElementById("InputId").value != "") ;//.... 这样的代码不是更精练吗?城然代码是精简了,但错误也来了。只要网页里没有这个对象或者这个对象在脚本执行的时候还未被加载到,就会报错。原来是 document.getElementById("InputId") 返回了 null 值,而 null 显然是没有 value 属性的,而我那句代码也用到了 e.value 来取属性但就没有报错,原因在于C系列的语言在多个条件式里的另一外属性:多个条件判断式组合判断时,先看第一个条件式,若已经符合条件时,就不会再去判断第二个判断式;也就是在第一个条件判断式未达到标准时再会去判断第二个判断式,依此类推直至最后。if (e && e.value!="") 是两个判断式的组合判断,这是一个“与”运算,只要一个判断式为 false 则整个值都为 false。第一个判断式 e 由于不存在或者未加载到返回了 null,而在JS里 null 就等同于 false ,这样不用后面的判断也可得到整个组合判断的结果是 false 了,所以系统就不会再去判断后面的那句 e.value 了。这点与B系列语言不同,尤其要注意。在B语言中 if e and e.value!="" then 这样的语句是先把所有的判断式都运算一遍后最后再做组合的“与”运算。所以这句代码在JS里是正确的,若放在VBS里就不一定正确了。 好了,肚里的货不多,文笔又比较烂,就写这么多了,望大家多多指正!

小编还为您整理了以下内容,可能对您也有帮助:

JavaScript中判断对象类型的几种方法总结_基础知识

我们知道,JavaScript中检测对象类型的运算符有:typeof、instanceof,还有对象的constructor属性:

1) typeof 运算符 typeof 是一元运算符,返回结果是一个说明运算数类型的字符串。如:"number","string","boolean","object","function","undefined"(可用于判断变量是否存在)。 但 typeof 的能力有限,其对于Date、RegExp类型返回的都是"object"。如:

typeof {}; // "object"

typeof []; // "object"

typeof new Date(); // "object"

所以它只在区别对象和原始类型的时候才有用。要区一种对象类型和另一种对象类型,必须使用其他的方法。如:instanceof 运算符或对象的 constructor 属。

2)instanceof 运算符。 instanceof 运算符要求其左边的运算数是一个对象,右边的运算数是对象类的名字或构造函数。如果 object 是 class 或构造函数的实例,则 instanceof 运算符返回 true。如果 object 不是指定类或函数的实例,或者 object 为 null,则返回 false。如:

[] instanceof Array; // true

[] instanceof Object; // true

[] instanceof RegExp; // false

new Date instanceof Date; // true

所以,可以用instanceof运算符来判断对象是否为数组类型:

function isArray(arr){

return arr instanceof Array;

}

3)constructor 属性。 JavaScript中,每个对象都有一个constructor属性,它引用了初始化该对象的构造函数,常用于判断未知对象的类型。如给定一个求知的值 通过typeof运算符来判断它是原始的值还是对象。如果是对象,就可以使用constructor属性来判断其类型。所以判断数组的函数也可以这样写:

function isArray(arr){

return typeof arr == "object" && arr.constructor == Array;

}

很多情况下,我们可以使用instanceof运算符或对象的constructor属性来检测对象是否为数组。例如很多JavaScript框架就是使用这两种方法来判断对象是否为数组类型。 但是检测在跨框架(cross-frame)页面中的数组时,会失败。原因就是在不同框架(iframe)中创建的数组不会相互共享其prototype属性。例如:

代码如下:

window.onload=function(){

var iframe_arr=new window.frames[0].Array;

alert(iframe_arr instanceof Array); // false

alert(iframe_arr.constructor == Array); // false

}

在Ajaxian上看到了一种精确的检测方法,跨原型链调用toString()方法:Object.prototype.toString()。可以解决上面的跨框架问题。 当Object.prototype.toString(o)执行后,会执行以下步骤: 1)获取对象o的class属性。 2)连接字符串:"[object "+结果(1)+"]" 3)返回 结果(2) 例如:

Object.prototype.toString.call([]); // 返回 "[object Array]"

Object.prototype.toString.call(/reg/ig); // 返回 "[object RegExp]"

这样,我们就可以写一个健壮的判断对象是否为数组的函数:

代码如下:

function isArray(arr){

return Object.prototype.toString.call(arr) === "[object Array]";

}

此种方法得到国外多个javaScript大师的认可,在即将发布的jQuery 1.3中将使用这种方法来检测数组。 prototype.js的一个维护者写了下面这个函数,用于获取对象的类型名

代码如下:

/**

* Returns internal [[Class]] property of an object

*

* Ecma-262, 15.2.4.2

* Object.prototype.toString( )

*

* When the toString method is called, the following steps are taken:

* 1. Get the [[Class]] property of this object.

* 2. Compute a string value by concatenating the three strings "[object ", Result (1), and "]".

* 3. Return Result (2).

*

* __getClass(5); // => "Number"

* __getClass({}); // => "Object"

* __getClass(/foo/); // => "RegExp"

* __getClass(''); // => "String"

* __getClass(true); // => "Boolean"

* __getClass([]); // => "Array"

* __getClass(undefined); // => "Window"

* __getClass(Element); // => "Constructor"

*

*/

function __getClass(object){

return Object.prototype.toString.call(object).match(/^[objects(.*)]$/)[1];

};

扩展一下,用于检测各种对象类型:

var is ={

types : ["Array", "Boolean", "Date", "Number", "Object", "RegExp", "String", "Window", "HTMLDocument"]

};

for(var i = 0, c; c = is.types[i ++ ]; ){

is[c] = (function(type){

return function(obj){

return Object.prototype.toString.call(obj) == "[object " + type + "]";

}

)(c);

}

alert(is.Array([])); // true

alert(is.Date(new Date)); // true

alert(is.RegExp(/reg/ig)); // true

js中if语句的用法(jsif用法)

,if不成立就执行else里面的语句在C语言中,ifelse语句的基本用法如下所示在java中,ifelse语句的用法跟C语言中的类似当第一个if条件不成立时,按顺序从上往下开始匹配,如果最终关于i

ifelse语句的用法

while{、

console.log;、

}

for循环的写法如下:基本上和c++的写法一样。

for{、

console.log;、

}

for的另外一个用法c++是没有的。这个写法和python的写法比较像。

functionTest{、

this.name=test;、

this.num=14;、

this.func=function{、

console.log、

}、

}、

vartest=newTest;、

for{、

console.log、

}

js的forEach不是关键字而是一个接口。接口形式如下:array.forEach,thisValue)例如:varnumbers=[123,12344,123123,123];

functionfunc{、

console.log;、

}、

numbers.forEach

还用一种循环是用for..of。这个倒是不常见。

varstr=test;、

for{、

console.log;、

}、

tips1:本教程是适合有一定编程基础快速了解js的同学。

JS如何使用alert语句

联想2020Win11JS编辑器首先,我们写上JS的最简单的基本框架。

然后,我们就能在这里输入【window.alert;】这样一个简单的输出语句。

接下来我们就能在引号中输入内容,如下图的是错的,要单引号。

如果是双引号是会发生这样的错误,跟Write功能一样。

此时我们还能在这里进行表达式的内容的计算。

此时我们就能在这里看到输出的结果。

不会使用的同学给我留言。更多网友回答:答:if{alert;}解释:if语句是在括号里面写判断条件,然后如果判断通过,则执行{}里面的代码。比如上面的条件就是当a等于b时,执行alert;

答:由于numm变量中是一个存在字符的字符串,在JS中,由于if语句的括号中需要一个布尔类型的值,而当它的值不是布尔类型时,JS会尝试将其转变为布尔值。那么,我们进行一个类型测试代码,你放在你的浏览器中运行一下,就

答:if{只有当条件为true时执行的代码}实例当时间小于20:00时,将得到问候Goodday,否则将得到问候Goodevening。if{x=Goodday;}else{x=Goodevening;}

答:已经确定boolean是布尔值,直接判断boolean就可以了,即if。!是逻辑非运算符,即取反。js属于弱类型语言,所以可以不用先声明数据类型,而在运算的时候再进行类型转换。所以!str当中,会先把str转换为布尔

答:给你一个例子吧!vard=newDatevartime=d.getHoursif{document.write}本例演示If语句。如果浏览器时间小于10,那么会向您问“早安”。

答:bar:baz;ifbar;elsebaz;==foo?baz:bar;ifreturnbar;elsereturnbaz;==returnfoo?bar:baz;对于以上使用三元操作符来优化if语句你肯定不会陌生,或许你

答:if//a是否=1{alert;//执行=1时的操作}elseif{//a是否=2alert;//执行=2时的操作}else{//不等1或2时执行alert;//执行对应操作}如果是可预见的条件可以

答:如果是的话,把事件绑定到图片对象上:varimgObjs=document.getElementsByTagName;for{alert;}

答:时执行代码,当条件为false时执行其他代码ifelseifelse语句使用该语句来选择多请注意,在这个语法中,没有else。javascript语言中的ifelse用法白话解释:1、简单的说,假设一个物体是圆的,

答:

举例讲解如何判断JavaScript中对象的类型_基础知识

在编写js程序的过程中,可能常常需要判断一个对象的类型,例如你写了一个函数,需要通过判断不同的参数类型来编写不同的代码。

首先可能会想到typeof操作符,看下面的这个例子:

得到的结果如下:

从上面的结果可以看到,用typeof操作符可以显示对象的类型,那么typeof操作符作用域null和undefined的结果会是什么呢?

typeof 操作符作用于null居然显示”object“(这个好像不科学,我还以为会显示”null'“),作用于undefined显示”undefined“(这个符合我们希望的结果),所以当用typeof操作符来判断一个对象的类型时,特别要小心,因为这个对象有可能是null。上面只是给了一部分typeof作用于这些对象的结果,下面的表列出了typeof操作符作用于Boolean, Number, String, Array, Date, RegExp, Object, Function, null, undefined的结果(有兴趣的读者可以自行测试):

从上表的结果可以看出Array, Date, RegExp显示的都是object,为什么不是直接的显示对象的类型呢?这就要引出js的另外一个操作符了:instanceof操作符,这个操作符用来判断一个对象是否为某种类型的对象,计算的值为true或者false。先来看下:

很显然通过这个instanceof是能判断对象的类型的,但是这个只能判断除了基本类型(包含String类型)的其它类型,他是不能判断基本类型的。但是instanceof不是总是能正常判断的,考虑一个框架的情形,要判断其类型的对象是另外一个frame传递过来的对象,首先来看下下面的例子。

main.html Main

frame1.html frame1

frame2.html frame2

names对象是在frame1框架中的,此时是通过frame1框架的Array来创建的,如果把names对象拿到frame2中的Array作比较,很显然names不是frame2中的Array的实例,以为frame1和frame2压根就不是同一和Array,从第2个现实结果可以很明显的看出names是他本身所在的frame的实例,从第3个输出可以看出frame1的Array和frame2的Array是不同的。那么遇到上面这种跨frame的比较该怎么办呢?我们总不能每次都拿框架对应的Array来做比较吧,有一种必须的办法可以解决上面的问题,看下面的代码:

{}.toString表示获取Object对象上的toString方法(这个方法时Object对象的基本方法之一),toString.call(now)表示调用toString方法。调用Date对象最原生的toString()(这个方法是Object上面的方法)方法可以显示[object Date]类型的字符串,假如是Array,则会产生[object Array]的字样,也就是说进行上面的操作会显示类似[object Class]的字样,那么我们只要判断这个字符串不就可以知道其类型了吗?由此可以写出如下的工具类:

tools.js

tools提供了type,isArray,isFunction等方法用来判断对象的类型,根据实际的需要可以自己添加需要判断类型的方法。type接受一个obj参数,它将对象的实际类型以小写的形式返回,比如你的需要判断对象的类型是Array,那么此方法将会返回array.

根据上面提供的工具类,再重新改写上面的例子:

fram2.html frame2

至此通过上面的根据类就可以很容易的判断对象的类型了。

注意:在IE中例如像alert这样的元素是不能判断的。

javascript中怎么做对象的类型判断_基础知识

最近在翻看John Resig的大作《Pro JavaScript Techniques》,里面讲到了如何做javascript的类型判断的问题。文中介绍了两种方式,一种是使用typeof,另一种是使用constructor。略感遗憾的是作为jquery的作者,他尽然没有介绍jquery使用的类型判断方式。不过没有关系,我在这里给大家一起总结下。

在这里我首先像大家推荐一个很好用的在线编辑器:http://jsfiddle.net/。他提供了jquery、mootools、prototype和YUI三个主流js框架的各个版本,当你需要编写简单的js测试程序的时候可以直接使用它。省去了打开编辑软件,创建各种类型文件的步骤。编辑代码之后,点击[Run]按钮,一切搞定。

1.typeof

typeof是我们在做类型判断时最常用的方法,他的优点就是简单、好记,缺点是不能很好的判断object、null、array、regexp和自定义对象。

下面是我的测试代码:

代码如下:

var str='str';

var arr=['1','2'];

var num=1;

var bool=true;

var obj={name:'test'};

var nullObj=null;

var undefinedObj=undefined;

var reg=/reg/;

function fn(){

alert('this is a function');

}

function User(name){

this.name=name;

}

var user=new User('user');

console.log(typeof str);

console.log(typeof arr);

console.log(typeof num);

console.log(typeof bool);

console.log(typeof obj);

console.log(typeof nullObj);

console.log(typeof undefinedObj);

console.log(typeof reg);

console.log(typeof fn);

console.log(typeof user);

代码运行结果:

2.constructor

现在介绍一种不常使用的方法,对象构造器constructor。他的优点是支持大部分对象类型的判断,特别是对自定义对象的判断;缺点是不能在null和undefined上使用。

测试代码和之前的差不多,区别就是使用XXX.constructor代替了typeof。

代码如下:

var str='str';

var arr=['1','2'];

var num=1;

var bool=true;

var obj={name:'test'};

var nullObj=null;

var undefinedObj=undefined;

var reg=/reg/;

function fn(){

alert('this is a function');

}

function User(name){

this.name=name;

}

var user=new User('user');

console.log(str.constructor);

console.log(arr.constructor);

console.log(num.constructor);

console.log(bool.constructor);

console.log(obj.constructor);

console.log(reg.constructor);

console.log(fn.constructor);

console.log(user.constructor);

console.log(nullObj.constructor);

console.log(undefinedObj.constructor);

运行结果:

运行到 console.log(nullObj.constructor); 的时候,浏览器报错:Uncaught TypeError: Cannot read property 'constructor' of null。类似的问题也发生在console.log(undefinedObj.constructor); 上面:Uncaught TypeError: Cannot read property 'constructor' of undefined。

3.Object.prototype.toString.call()

最后要介绍的是jquery中使用的方式,Object.prototype.toString.call()。优点是支持绝大多数类型的判断,唯一的缺点是不支持自定义对象的判断。

测试代码如下:

代码如下:

var str='str';

var arr=['1','2'];

var num=1;

var bool=true;

var obj={name:'test'};

var nullObj=null;

var undefinedObj=undefined;

var reg=/reg/;

function fn(){

alert('this is a function');

}

function User(name){

this.name=name;

}

var user=new User('user');

var toString=Object.prototype.toString;

console.log(toString.call(str));

console.log(toString.call(arr));

console.log(toString.call(num));

console.log(toString.call(bool));

console.log(toString.call(obj));

console.log(toString.call(reg));

console.log(toString.call(fn));

console.log(toString.call(user));

console.log(toString.call(nullObj));

console.log(toString.call(undefinedObj));

运行结果:

console.log(toString.call(user)); 的返回结果为:[object Object],不能做进一步判断。

总结

javascript中经常使用的对象判断方式包括:typeof、constructor和Object.prototype.toString.call()。其中typeof很好理解,他是JavaScript本身支持的语法。constructor很少使用,但是相信大家通过demo也能看懂他代表的意思。至于Object.prototype.toString.call()可能多少会让人有点费解,他和XXX.toString()有什么区别呢,为什么不能直接使用XXX.toString()呢?

我们在浏览器中运行下面的代码:查看运行结果:

null和undefined因为不存在toString()方法,所以会报错,我们就不去管他们了。至于其他对象,通过toString()返回的内容和使用Object.prototype.toString.call()返回的内容差别很大。这是因为Object.prototype.toString()方法被设计用来返回对象类型的。String、Array、Boolean、Regexp、Number和Function都继承自Object,同时也就继承了Object的原型方法toString(),但是他们都对toString()进行了重写。执行xxx.toString()时使用的是重写后的方法,返回的结果自然会和Object.prototype.toString.call()的结果不一致。

通过上面的例子,大家一定对这三种方式有了更深刻的认识,熟悉他们的优缺点,然后可以根据自己的需要选择合适的方式。推荐使用Object.prototype.toString.call()方法,因为他能解决绝大部分情况的判断,在遇到返回值为[object Object]时,再使用constructor辅助判断,看是否是自定义对象。

代码如下:

var str='str';

var arr=['1','2'];

var num=1;

var bool=true;

var obj={name:'test'};

var nullObj=null;

var undefinedObj=undefined;

var reg=/reg/;

function fn(){

alert('this is a function');

}

function User(name){

this.name=name;

}

var user=new User('user');

console.log(str.toString());

console.log(arr.toString());

console.log(num.toString());

console.log(bool.toString());

console.log(obj.toString());

console.log(reg.toString());

console.log(fn.toString());

console.log(user.toString());

console.log(nullObj.toString());

console.log(undefinedObj.toString());

六三科技网还为您提供以下相关内容希望对您有帮助:

js中if语句的用法(jsif用法)

if不成立就执行else里面的语句在C语言中,ifelse语句的基本用法如下所示在java中,ifelse语句的用法跟C语言中的类似当第一个if条件不成立时,按顺序从上往下开始匹配,如果最终关于iifelse语句的用法while{、console.log;、}...

JavaScript中判断对象类型的几种方法总结_基础知识

我们知道,JavaScript中检测对象类型的运算符有:typeof、instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一个说明运算数类型的字符串。如:"number","string","boolean","obj...

js利用与或运算符优先级实现if else条件判断表达式

复制代码 代码如下: / 利用运算符优先级实现ifelse表达式 result = expression1 && expression2 当且仅当两个表达式的值都等于 True 时,result 才是 True。如果任一表达式的值等于 False,则 result 为 False。JScript 使...

javascript中怎么做对象的类型判断_基础知识

1.typeof typeof是我们在做类型判断时最常用的方法,他的优点就是简单、好记,缺点是不能很好的判断object、null、array、regexp和自定义对象。下面是我的测试代码: 代码如下:var str='str';var arr=['1','2'];va...

javascript检测对象中是否存在某个属性判断方法

该方法只能判断自有属性是否存在 对于继承属性会返回false 代码如下:var o={x: };o hasOwnProperty("x"); //true 自有属性中有x o hasOwnProperty("y"); //false 自有属性中不存在y o hasOwnProperty("toString...

举例讲解如何判断JavaScript中对象的类型_基础知识

要判断其类型的对象是另外一个frame传递过来的对象,首先来看下下面的例子。main.html Main frame1.html frame1 frame2.html frame2 names对象是在frame1框架中的,此时是通过frame1框架的Array来创建的,...

javascript中如何判断类型汇总

本文就来给大家总结了下javascript中判断类型的相关资料,下面话不多说了,来一起看看详细的介绍吧String一个字符串始终是一个字符串,所以这一块是很容易。除非使用new(new String)调用,否则typeof将返回“object”。所以...

学javascript需要什么基础

其次,了解一些基础的编程概念是非常重要的。比如变量、数据类型、函数、条件判断、循环等。这些概念在大多数编程语言中都是通用的,掌握它们将有助于你更快地理解JavaScript的语法和逻辑。此外,虽然不是必须的,但如果你已经...

有关javascript中条件判断的问题请教

window.confirm是显示一个确认对话框,其中包含一个可选的消息和确定取消按钮,判定被选取值是否为true是ok否cancel,赋值给result输出

JavaScript中如何判断一个值的类型

我们知道在js中有一个运算符可以帮助我们判断一个值的类型,它就是typeof运算符。console.log(typeof 123); //numberconsole.log(typeof '123'); //stringconsole.log(typeof true); //booleanconsole.log(typeof ...

Top