JS从0开始(二):错误、运算符 、判断分支、注释、window.prompt

432 阅读1分钟

一.JavaScript错误

JS错误大体分为两大类:语法错误、通用错误

1.语法错误

console.log(3)后面的分号是中文输入法的,导致产生SyntaxError,此时,所有语句都不会执行

2.通用错误:中断执行

(1)错误语句之前的语句会执行,之后的语句不会执行,

(2)代码块与代码块之间的错误是不会相互影响的

二.JavaScript运算符

计算机的运算步骤:

<script>
var a=1,
    b=2,
    d=3;
var c=(a+b)*d

var c=(a+b)*d : 计算机自己操作的步骤为 :
1.声明变量c,
2.变量a的值和变量b的值相加,再与变量d相乘得到结果
3.将所得的结果赋值给c

(经验)小知识:

浏览器F12的调试页面,数字类型呈现蓝色,字符串类型呈现灰黑色

1. 加号(+)

任何数据类型的值加上字符串 结果都为字符串

2. 除号(/)

<script>
var a=5,
b=2,
c;
c=a/b;// 2.5
c=0/0 //输出NaN  /NaN 全称为Not a Number
                 / NaN为数字类型 ;   console.logtypeofNaN))结果为number
c='a'/'b' //NaN
c=NaN /NaN //NaN  
   /NaN 任何数据与NaN运算的结果都为NaN
/原因:之前计算的时候就已经得出非数的结果,后续再输出的过程中 输出的仍然是非数的结果,(输出数据在计算的时候就已经出现了错误,导致了非数的出现) 

   console.log(1/0);//Infinity    
  console.log(-1/0);//-Infinity
  Infinity    为数字类型
   console.log(typeof (Infinity)); /结果为number
</script>

NaN为数字类型 ; console.log(typeof(NaN))结果为number
正负无穷等也为数字类型 console.log(typeof (Infinity)); /结果为number

3. 取模、取余(%)

<script>
c= 5 % 2;// 1

/规律:前面的数小于后面的数时,取余后的值都为自己本身
c = 4 % 6// 4 
</script>

4. 交换值

交换a和b的值

<script>
var a = 1,
b = 2;
//方式一
var c = a;
a = b ;
b = c ;
//方式二  
a = a + b;
b = a - b;
a = a - b;
</script>

以后面试题中不允许声明新值时,就用方式二

5. ++、--

<script>
var a = 1;
console.log(a++)// 输出1  
/先打印后运算

var a = 1;
console.loh(++a) //输出2
/先运算后打印

var a = 5,
    b;
 b = a++ + 1;  //执行玩这句后,a再++
 console.log(b,a); //6,6 
 
   b = ++a + 1;  
 console.log(b,a); //7,6
 
 b = a-- + --a //8,3  
 /此处可理解为-- 优先级大于+ 所以先--a  再去相加;   a减1后相当于4+4=8  执行完后再减1;   
 b = a-- * --a //16,3   
  b = a-- * --a //0,3
 / --的优先级也大于 * / %
</script>

新领悟的知识点:--、++的优先级也大于 + - * / %

6. 比较运算符

<script>
 /number遇到str 先将字符串转换为number 在进行比较
var bool = 1 > '2';
console.log(a); //false

/string 遇到 string 将比较字符串间各个字符的ASCII码的大小,直到比较出大小为止
var bool =  'acd' > 'abw' //true 
/因为第二个字符对应ASCII码 c > b 比较停止 返回布尔值
var bool = 'abcdefghigk' > "b"  //false
/第一个就停止了

/string 遇到 string,不会转化为number 直接进行ASCII码进行比较 4ASCII码大于1 比较结束 返回true
var bool = '4.5' > '11' //true /string类型之间的比较
var bool = 4.5 > 11  //false /number类型之间的比较

//相等是不看数据类型的
var bool = 1 == '1'; //true
//全等是要看数据类型是否相等
var bool = 1 === '1' //false

/NaN 与包括自己在内的任何东西都不相等
var bool = NaN == NaN; //false
</script>

7.逻辑运算符

除undefined、null、NaN、''、0、false为假外其余(如[]、{}等)皆为真

<script>
/遇到真就往后走,遇到假或者走到最后就返回当前的值
1 && 1 //返回1
0 && 1 //0
1 && 0 //0
0 && 0 //0

/遇到假就往后走,遇到真或者走到最后就返回当前的值
1 || 1 //1
0 || 1 //1
1 || 0 //1
0 || 0 //0
console.log(name || '未找到数据');

||也可以用来设置默认值
a.onclick = function(e){
 /IE低版本浏览器的数据保留在window.event中, 而非IE浏览器的直接保存在上面括号内的e中
 var event = e || window.event
}

var a= [] && 1;
console.log(a);//返回1
var a={} && 1;//返回1
 console.log(a);//返回1
 
  var a= [] && {};
   console.log(a);//返回object
   console.log(typeof(a));//object
</script>

三.判断分支

1.if语句

(1)if条件互斥性,如果互斥的就一定不可以分开写,就要使用else if
(2)使用五个if需要判断五次,如果一直使用else if,只需要判断一次寻找满足的条件就行了(使用else后大大降低了算法的时间)

2.switch

if和switch 适用场景不同:有些场景更适合switch,所以说switch暂时不会被if这些淘汰
switch更直观
一般来说如果值有范围并且条件多个时用 if如上文中的查成绩
但是定值用 而且这个定值有多个就用 switch 如下文中的查城市薪资

<script>
switch (city) {
           case '北京': console.log('15k'); break;
           case '上海': console.log('13k'); break;
           case '深圳': console.log('12k'); break;
           case '广州': console.log('11k'); break;
           default:console.log('9k');
       }
</script>

四.注释

行注释: // 
块注释: /* 
         *
         *
         *
         */
         每一行写上* 格式好一些 就好比 运算符 + - * /  空一格更好

五.实战任务 window.prompt

 <script>
       /用window.prompt()接收星期几,填写上午下午,在页面显示出生活计划,比如周六下午安排打球
       var weekday = window.prompt("你的计划");
       var time = window.prompt("上午还是下午");
       var schedule = {
           星期一 :['上课','踢球'],
           星期二 :['下课','练琴'],
           星期三 :['上语文课','健身'],
           星期四 :['上数学课','吉他'],
           星期五 :['上英语课','棒球'],
           星期六 :['上计算机课','橄榄球'],
           星期天 :['上体育课','打篮球'],
       }
       switch (weekday){
        case "星期一":
        if(time == '上午'){
         document.write(weekday + time + "的安排是" +schedule[weekday][0]);
         }else if(time == '下午'){
         document.write(weekday + time + "的安排是" +schedule[weekday][1]);
         } 
         break;
         case "星期二":
         if(time == '上午'){
           document.write(weekday + time + "的安排是" +schedule[weekday][0]);
         }else if(time == '下午'){
           document.write(weekday + time + "的安排是" +schedule[weekday][1]);
         }
         break;
         case "星期三":
         if(time == '上午'){
           document.write(weekday + time + "的安排是" +schedule[weekday][0]);
         }else if(time == '下午'){
           document.write(weekday + time + "的安排是" +schedule[weekday][1]);
         }
         break;
         case "星期四":
         if(time == '上午'){
           document.write(weekday + time + "的安排是" +schedule[weekday][0]);
         }else if(time == '下午'){
           document.write(weekday + time + "的安排是" +schedule[weekday][1]);
         }
         break;
         case "星期五":
         if(time == '上午'){
           document.write(weekday + time + "的安排是" +schedule[weekday][0]);
         }else if(time == '下午'){
           document.write(weekday + time + "的安排是" +schedule[weekday][1]);
         }
         break;
         case "星期六":
         if(time == '上午'){
           document.write(weekday + time + "的安排是" +schedule[weekday][0]);
         }else if(time == '下午'){
           document.write(weekday + time + "的安排是" +schedule[weekday][1]);
         }
         break;
         case "星期天":
         if(time == '上午'){
           document.write(weekday + time + "的安排是" +schedule[weekday][0]);
         }else if(time == '下午'){
           document.write(今天是+"schedule[weekday][1]");
         }
         break;
       
       }
       
    

   </script>