js04

操作符及if语句

  • 操作符

1.位操作符((32位的二进制数))(了解)
1.按位非(NOT):按位非操作符由一个波浪线(~)表示,执行按位非的结果就是返回数值的反码
2.按位与(AND):按位与操作只在两个数值的对应位都是 1 时才返回 1,任何一位是 0,结果都是 0
3. 按位或(OR):按位或操作在有一个位是 1 的情况下就返回 1, 而只有在两个位都是 0 的情况下才返回 0
4. 按位异或(^):按位异或与按位或的不同之处在于,这个操作在两个数值对应位上只有一个 1 时才返回 1,如果对应的两位都是 1 或都是 0,则返回 0
5. 左移 :左移操作符由两个小于号(<<)表示,这个操作符会将数值的所有位向左移动指定的位数
6.右移:1.有符号右移操作符由两个大于号(>>)表示,这个操作符会将数值向右移动,但保留符号位(即正负号标记)

  • 无符号右移操作符由 3 个大于号(>>>)表示,这个操作符会将数值的所有 32 位都向右移动

2.逻辑操作符(掌握)
1.逻辑非(!):逻辑非操作符首先会将它的操作数转换为一个布尔值,然后再对其求反
规则:
如果操作数是一个非空(null)对象,返回 false
如果操作数是一个空字符串,返回 true
如果操作数是一个非空字符串,返回 false
如果操作数是数值 0,返回 true
如果操作数是任意非 0 数值(包括 Infinity),返回 false
如果操作数是 null,返回 true
如果操作数是 NaN,返回 true
如果操作数是 undefined,返回 true
注:同时使用两个逻辑非操作符,可以用于将一个值转换为与其对应的布尔值
2.逻辑与 (&&):在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值
规则:
如果第一个操作数是对象,则返回第二个操作数
如果第二个操作数是对象,则只有在第一个操作数的求值结果为 true 的情况下才会返回该对象
如果两个操作数都是对象(或非0数),则返回第二个操作数
如果有一个操作数是 null,则返回 null
如果有一个操作数是 NaN,则返回 NaN
如果有一个操作数是 undefined,则返回 undefined
如果有一个操作数是 0 ,则返回0
注:逻辑与操作属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值
3. 逻辑或 (||):如果有一个操作数不是布尔值,逻辑或也不一定返回布尔值
规则:
如果第一个操作数是对象,则返回第一个操作数
如果第一个操作数的求值结果为 false,则返回第二个操作数
如果两个操作数都是对象(或非0数),则返回第一个操作数
如果两个操作数都是 null,则返回 null
如果两个操作数都是 NaN,则返回 NaN
如果两个操作数都是 undefined,则返回 undefined
注:逻辑或操作符也是短路操作符
避免为变量赋 null 或 undefined 值:
var myObject = preferredObject || backupObject;
(变量 myObject 将被赋予等号后面两个值中的一个。变量 preferredObject 中包含优先赋给变量 myObject 的值,变量 backupObject 负责在 preferredObject 中不包含有效值的情况下提供后备值。如果 preferredObject 的值不是 null,那么它的值将被赋给 myObject;如果是 null,则将 backupObject 的值赋给 myObject)

// 逻辑非: !,结果一定是boolean 类型
			// 逻辑与: &&,结果不一定是什么类型,短路操作(只要出现false 就停止运算),只要第一个值能决定表达式的值就停止运算;  如果第一个操作数不能决定表达式的值,则直接返回第二个操作数.
			// var found = true;
			// var result = (found && someUndefinedVariable); 
			// alert(result);
			
			// var found = false;
			// var result = (found && someUndefinedVariable); 
			// alert(result); 
			
			// 逻辑或: ||,结果不一定是什么类型,短路操作(只要出现true 就停止运算),只要第一个值能决定表达式的值就停止运算;   如果第一个操作数不能决定表达式的值,则直接返回第二个操作数.
			// var found = true;
			// var result = (found || someUndefinedVariable); 
			// alert(result); 
			
			var c = (a = 3) || (b = 4);
			console.log(a);//值为多少?3
			// console.log(b);//值为多少?报错
			console.log(c);//值为多少?3

3.乘性操作符(乘法、除法和求模)
1.乘法(
如果乘积超过了 ECMAScript 数值的表示范围,则返回 Infinity 或-Infinity
如果有一个操作数是 NaN,则结果是 NaN
如果是 Infinity 与 0 相乘,则结果是 NaN // Infinity
0=NaN
如果是 Infinity 与非 0 数值相乘,则结果是 Infinity 或-Infinity,取决于有符号操作数的符号
如果是 Infinity 与 Infinity 相乘,则结果是 Infinity
如果有一个操作数不是数值,则在后台调用 Number()将其转换为数值,然后再应用上面的规则
2.除法 (/)
如果有一个操作数是 NaN,则结果是 NaN
如果是 Infinity 被 Infinity 除,则结果是 NaN // Infinity / Infinity = NaN
如果是零被零除,则结果是 NaN
如果是非零数被零除,则结果是 Infinity 或-Infinity,取决于有符号操作数的符号
如果是 Infinity被任何数值除,则结果是Infinity 或-Infinity,取决于有符号操作数的符号 // Infinity/0=Infinity
如果有一个操作数不是数值,则在后台调用 Number()将其转换为数值,然后再应用上面的规则
3. 求模 (%)
如果操作数都是数值,执行常规的除法计算,返回除得的余数
如果被除数是无穷大值Infinity 而除数是有限大的数值,则结果是 NaN // Infinity%?=NaN
如果被除数是有限大的数值而除数是零,则结果是 NaN //5%0=NaN
如果是 Infinity 被 Infinity 除,则结果是 NaN // Infinity % Infinity = NaN
如果被除数是有限大的数值而除数是无穷大的数值,则结果是被除数 // 5%Infinity = 5
如果被除数是零,则结果是零 //0%?=0
如果有一个操作数不是数值,则在后台调用 Number()将其转换为数值,然后再应用上面的规则

// 乘性操作符:* / %
			// 乘性操作符结果值的类型 一定是number 类型
			
			console.log([]*2);//""*2
			
			// var s=new String("123");
			// console.log(typeof s);
			// console.log(typeof s.valueOf());

4.加性操作符
1.加法
如果有一个操作数是 NaN,则结果是 NaN
如果是 Infinity 加 Infinity,则结果是 Infinity
如果是-Infinity 加-Infinity,则结果是-Infinity
如果是 Infinity 加-Infinity,则结果是 NaN // Infinity +(- Infinity )=NaN
如果是+0 加+0,则结果是+0
如果是-0 加-0,则结果是-0
如果是+0 加-0,则结果是+0 //+0-0=+0
如果有一个操作数是字符串
如果两个操作数都是字符串,则将第二个操作数与第一个操作数拼接起来;
如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再将两个字符串拼接起来;如果有一个操作数是对象、数值或布尔值,则调用它们的 toString()方法取得相应的字符串值,然后再应用前面关于字符串的规则。对于 undefined 和 null,则分别调用 String()函数并取得字符串"undefined"和"null"
2.减法
如果两个操作符都是数值,则执行常规的算术减法操作并返回结果
如果有一个操作数是 NaN,则结果是 NaN
如果是 Infinity 减 Infinity,则结果是 NaN //infinity-infinity=NaN
如果是-Infinity 减-Infinity,则结果是 NaN
如果是 Infinity 减-Infinity,则结果是 Infinity
如果是-Infinity 减 Infinity,则结果是-Infinity
如果是+0 减+0,则结果是+0
如果是+0 减-0,则结果是-0 //+0-(-0)=(-0)
如果是-0 减-0,则结果是+0
如果有一个操作数是字符串、布尔值、 null 或 undefined,则先在后台调用 Number()函数将其转换为数值,然后再根据前面的规则执行减法计算。如果转换的结果是 NaN,则减法的结果就是 NaN
如果有一个操作数是对象,则调用对象的 valueOf()方法以取得表示该对象的数值。如果得到的值是 NaN,则减法的结果就是 NaN。如果对象没有 valueOf()方法,则调用其 toString()方法并将得到的字符串转换为数值

// 加号 +:结果要么是string 类型,要么是number 类型
			
			console.log(null+undefined);
			console.log(true+Infinity);
			
			console.log([]+{});//结果为是string 类型
			console.log("123"+5);

4.关系操作符

1.比较运算符(小于(<) 、大于(>) 、小于等于(<=)和大于等于(>=))
如果两个操作数都是数值,则执行数值比较。
如果两个操作数都是字符串,则比较两个字符串对应的字符编码值。
如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较。
如果一个操作数是对象,则调用这个对象的 valueOf()方法,用得到的结果按照前面的规则执行比较。如果对象没有 valueOf()方法,则调用 toString()方法,并用得到的结果根据前面的规则执行比较。
如果一个操作数是布尔值,则先将其转换为数值,然后再执行比较。

2.相等运算符(==)

相等和不相等
如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false 转换为 0,而true 转换为 1
如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值
如果一个操作数是对象,另一个操作数不是,则调用对象的 valueOf()方法,用得到的基本类型值按照前面的规则进行比较;这两个操作符在进行比较时则要遵循下列规则
null 和 undefined 是相等的
要比较相等性之前,不能将 null 和 undefined 转换成其他任何值(null == 0为false)

如果有一个操作数是 NaN,则相等操作符返回 false,而不相等操作符返回 true。重要提示:即使两个操作数都是 NaN,相等操作符也返回 false;因为按照规则, NaN 不等于 NaN。NaN!=r任何–>
如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回 true;否则,返回 false
全等和不全等:全等操作符由 3 个等于号(=)表示,它只在两个操作数未经转换就相等的情况下返回 true
不全等操作符由一个叹号后跟两个等于号(!
)表示,它在两个操作数未经转换就不相等的情况下返回 true
注: null == undefined 会返回 true,因为它们是类似的值;但 null === undefined 会返回 false,因为它们是不同类型的值
in运算符 :检查右侧对象里面是否拥有左侧属性名,如果有返回true;反之,返回false
instanceof运算符:检查左侧的对象是否是右侧类的实例,如果是返回true;如果一个对象是一个“父类”的子类的实例,则一样返回true;
(所有的对象都是Object的子类)

// 比较操作符:>   <    >=  <=,结果都是boolean 类型
			console.log("art"<"Back");//false
			
			console.log("ART".toLowerCase())//转小写toLowerCase()
			console.log("art".toLowerCase()<"Back".toLowerCase());
			
			console.log("art".toUpperCase())//转大写toUpperCase()
			
			//比较运算里,任一个操作数是NaN,结果都是false

4.2相等运算符-全等运算符-in运算符-intanceof运算符

// 相等符: ==   不等符:!=
			// 相等判断:结果一定是true 或false ,优先进行数值判断(NaN跟任何值都不等),如果两个操作数都是字符串才进行字符串值的比较
			// null 和undefined 不能被隐式转换为其他类型,null==undefined-->true
			
			// 全等符:===   不全等:!==
			// 全等判断:结果一定是true 或false,两个操作数必须类型相等值也相等--true
			//null===undefined-->false
			
			//in 运算:检查左侧字符串是否是右侧对象的属性
			var a = {x:1, y:2, z:''};
			console.log('x' in a);
			console.log('z1' in a)
			console.log('toString' in a);//true
			console.log(a.toString);//打印函数体
			// instanceof 检查继承关系,检查左侧对象是否是右侧类的实例
			// 所有的引用类型都是Object 类的实例
			var d = new Date();
			console.log(d instanceof Date);//true
			console.log(d instanceof Array);//false
			console.log(d instanceof String);//false
			console.log(d instanceof Object);//true
			
			var arr=[];
			console.log(arr instanceof Array);//true 
			console.log(arr instanceof Object);//true

Null和Undefined都不能被转换,所以它不等于什么,但null和undefined是相等的

5 .三目运算-赋值-逗号

  • 条件:variable = boolean_expression ? true_value : false_value;
    如果求值结果为 true,则给变量 variable 赋 true_value 值;如果求值结果为 false,则给变量 variable 赋 false_value 值
  • 赋值:如果在等于号(=)前面再添加乘性操作符、加性操作符或位操作符,就可以完成复合赋值操作。
    乘/赋值(*=)、除/赋值(/=)、模/赋值(%=)、加/赋值(+=)、减/赋值(-=)、左移/赋值(<<=);var a=10;a<<=3;//1010000,80
    有符号右移/赋值(>>=)、无符号右移/赋值(>>>=)。
  • 逗号:逗号操作符多用于声明多个变量,还可以用于赋值。在用于赋值时,逗号操作符总会返回表达式中的最后一项
  • 表达式计算:
    eval()可以解释运行由JavaScript源代码组成的字符串,并产生一个值。
    eval()只有一个参数。如果传入的参数不是字符串,它直接返回这个参数。如果参数是字符串,它会把字符串当成JavaScript代码进行编译,如果编译失败者抛出一个语法错误异常。如果编译成功,则开始执行这一段代码,并返回字符串中的最后一个表达式会或语句的值,如果最后一个表达式或语句没有值,则最终返回undefined。如果字符串抛出一个异常,这个异常将把该调用传递给eval()。
    注:查找变量的值和定义新变量和函数的操作和局部作用域中的代码完全一样。如果一个函数定义了一个局部变量x,然后调用eval(“x”),它会返回局部变量的值。如果它调用eval(“x=1”),它会改变局部变量的值。如果函数调用了eval(“var y=2;”),它声明了一个新的局部变量y
//条件操作符 a?b:c 
		//如果a 为true,则整体表达式为b;如果a 为false,则整体表达式为c
		var myVar=console.log("aaa")?1:true;
		console.log(myVar);//true
		
		//赋值运算 = *= += /= -= %=  <<=  >>=   ……
		var  num=10;
		num/=2;//num=num/2
		console.log(num);//5----0000 0000 0000 0000 0000 0000 0000 0101
		num>>=3;//num=num>>3
		console.log(num);//0
		
		console.log(num1,num2,num3);
		//var 开头,多个变量用逗号隔开: 多个变量同时被var 声明 
		//被var 声明的变量都具有变量提升的特性,被提升的变量初始值为undefined
		var num1=1, num2=2, num3=3;
		if(1,100,0){//逗号运算,整体表达式的值由最后一项决定
			console.log("hello,world")
		}
			
			var iF=(1,100,true,{})?100:true;
			console.log(iF)

6.eval

// //eval(),如果传参为非字符串直接返回传参内容;
			// //如果传参为字符串,eval函数会把它当作js 代码进行执行,执行结果是传参里最后一个表达式的值
			// console.log(  eval(function f(){var x=10; return x+1;})   );       //非字符串
			// console.log(  eval("function f(){var x=10; return x+1;}f();100;")   );     //传入字符串
			// 
			// console.log(f());
			// 
			// var a1=100;
			// function myfn(){
			// 	var a1=200;
			// 	console.log(eval("a1"));
			// }
			// myfn();
			// 
			// eval(   "function f(){x=100;console.log(x);return x;};f();");
			// console.log(f());
			// console.log(x);
			
			var geval=eval;                				//使用别名geval调用eval将是全局eval
			var x="global",y="global";    
			function f(){                
					var x="local";            
						eval("x += ' changed';");
						alert(x);// local changed
					return x;                
			}		
			function g(){
				var y="local";
					geval("y += ' changed';"); 			
					alert(y);// local
					return y;
			}
			console.log(f(),x);      //local changed    global
			console.log(g(),y);      //local

7.if判断

// if({}){
		// 	console.log(11111111111)
		// 	//代码块
		// }
		
		// if(){
		// 	
		// }else{
		// 	
		// }
		
		// if(条件1){
		// 	
		// }else if(条件2){
		// 	
		// }else if(条件3){
		// 	
		// }else if(……){
		// 	
		// }
		// else{
		// 	
		// }
		
		
		// function myFunction(){
		// 	var x="";
		// 	var time=new Date().getHours();		//获取小时
  //           //getFullYear()、getMonth()+1、getDate()、getDay()、getHours()、getMinutes()、getSeconds()、getTime()
		// 	if (time<20){
		// 		x="Good day";
  //   		}
		// document.getElementById("demo").innerHTML=x;
		// }
		
		// function myFunction(){
		// 	var x="";
		// 	var time=new Date().getHours();
		// 	if (time<15){
		// 		x="Good day";
		// 	 }
		// 	else{
		// 		x="Good evening";
		// 	}
		// 	document.getElementById("demo").innerHTML=x;
		// }
		
		var d = new Date();
		var time = d.getHours();
		if (time<12)
		{
			document.write("<b>早上好</b>");
		}
		else if (time<18)
		{
			document.write("<b>今天好</b>");
		}
		else
		{
			document.write("<b>晚上好!</b>");
		}
  • 语句

  • if语句(只有当指定条件为 true 时,该语句才会执行代码)
    if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码
    if…else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码
    if…else if…else 语句- 使用该语句来选择多个代码块之一来执行
  • switch 语句 - 使用该语句来选择多个代码块之一来执行(break 阻止代码自动地向下一个 case 运行)
    for语句(循环可以将代码块执行指定的次数)
    for (语句 1; 语句 2; 语句 3)
    {
    被执行的代码块
    }
    语句 1 (代码块)循环开始前执行 starts;语句 2 定义运行循环(代码块)的条件;语句 3 在每次循环(代码块)已被执行之后执行
    (语句1、语句2、语句3都是可以忽略的)

8.switch

<p>点击下面的按钮来显示今天是周几:</p>
<button onclick="myFunction()">点击这里</button>
<p id="demo"></p>
<script>
// function myFunction(){
// 	var x;
// 	var d=new Date().getDay();//5
// 	switch (d){
//   		case 0:x="今天是星期日";
//     	break;
//  		case 1:x="今天是星期一";
//         break;
//   		case 2:x="今天是星期二";
//         break;
//         case 3:x="今天是星期三";
//    	 	break;
//   		case 4:x="今天是星期四";
//     	break;
//   		case 5:x="今天是星期五";
//         break;
//   		case 6:x="今天是星期六";
//     	break;
//  	}
// 	document.getElementById("demo").innerHTML=x;
// }

//switch语法,两个关键词 break和 default;
function myFunction()
{
	var x;
	var d=new Date().getDay();
	switch (d)
    {
  		case 6:x="今天是星期六";
    	break;
  		case 0:x="今天是星期日";
    	break;
  		default:
    	x="今天是星期五";
  	}
	document.getElementById("demo").innerHTML=x;
}
</script>

9.for

<p>点击按钮循环代码5次。</p>
<button onclick="myFunction()">点击这里</button>
<p id="demo"></p>
<script>
function myFunction(){
	var x="";
	//for 循环执行完毕后才会往下执行(会堵塞下边代码的执行)
	for (var i=0;i<5;i++){
		if(i==3){
			break;// 代码块里遇到break,则立即停止执行
		}
		x=x + "该数字为 " + i + "<br>";//i=0   x="该数字为0<br>"
									  //i=1   x="该数字为0<br>该数字为1<br>"
	}
	document.getElementById("demo").innerHTML=x;
}


  var h = new Array(5);//[,,,,,]
  console.log(h.length);//5
  for (var i = 0; i < h.length; h[i++]=i);
  console.log(h);
</script>
<script>
			//1\ 语句1
			//2\ 语句2
			//3\ 如果上一步为true ,执行代码块;   反之,for 循环停止
			//4\ 语句3
			//5\ 语句2
			//3\ 如果上一步为true ,执行代码块;   反之,for 循环停止
			//4\ 语句3
			//5\ 语句2
			// ……
			// for(语句1;语句2;语句3){
			// 	//代码块
			// }
			
			cars = ["BMW", "Volvo", "Saab", "Ford"];
			// for (var i = 0; i < cars.length; i++) {
			// 	document.write(cars[i] + "<br>");
			// }
			// console.log(i)
			
			// var i=0;
			// for(;i<cars.length;i++){
			// 	console.log(i);
			// }
			
			// var i=0;
			// for(;i<cars.length;){
			// 	console.log(i);
			// 	i++;
			// }
			
			var i=1;//记住:避免死循环
			for(;i;){
				console.log(i);
				i++;
			}
		</script>

10.for循环练习

<pre>
			  1、循环个数组var size=[1,2,3,4,5,6,7],输出数组的每个元素到页面上;
			  2、写个乘法口诀表;
			  3、百钱百鸡
				 公鸡5文钱一只,
				 母鸡3文钱一只,
				 小鸡1文钱三只,
				 用100文钱买100只鸡, 
				 问,公鸡,母鸡,小鸡各几只?
		</pre>
		<script type="text/javascript">
			var size=[1,2,3,4,5,6,7];
			for(var i=0;i<size.length;i++){
				document.write(size[i]+"<br>")
			}
		</script>
		<script type="text/javascript">
			// 1*1
			// 1*2 2*2
			// 1*3 2*3 3*3
			for(var m=1;m<=9;m++){
				for(var n=1;n<=m;n++){
					document.write(n+'*'+m+"="+n*m+"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;")
				}
				document.write("<br>")
			}
		</script>
		<script type="text/javascript">
			for(var gongj=0;gongj<=(100/5);gongj++){
				for(var muji=0;muji<=33;muji++){
					var xiaoj=100-gongj-muji;
					if((xiaoj%3===0)&&(gongj*5+muji*3+xiaoj/3===100)){
						document.write(`公鸡有${gongj}只,母鸡有${muji}只,小鸡有${xiaoj}只<br>`)
					}
				}
			}
		</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值