你不知道的JavaScript 短路运算的妙用: ||会把为真的值a赋给f,先看||左边的是否为真,再看||右边的是否为真
若是不输入性别,则||左边为假,右边为真,若输入性别,则先选择||左边的
1 2 3 4 <script> let sex =prompt ("请输入性别" )||"保密" console .log (sex); </script>
1 2 3 let a = 6 b = 0 let f = a || b
&& 和 || && 如果表达式1 结果为真 则返回表达式2 如果表达式1为假 那么返回表达式1
1 2 3 4 5 6 7 8 9 console .log (123 && 456 ); console .log (0 && 456 ); console .log (0 && 1 + 2 && 456 * 56789 ); console .log ('' && 1 + 2 && 456 * 56789 );
|| 如果表达式1 结果为真 则返回的是表达式1 如果表达式1 结果为假 则返回表达式2
1 2 3 4 5 6 7 console .log (123 || 456 ); console .log (123 || 456 || 456 + 123 ); console .log (0 || 456 || 456 + 123 );
for-in 与for-of使用方法操作 for...in
和for...of
是两种不同的循环结构,用于遍历集合或数组中的元素
for...in
循环:
for...of
循环:
用于遍历可迭代对象(如数组、字符串、Set、Map 等)的元素。
循环变量表示的是集合中的每个元素本身 。
循环过程中只会遍历集合自身的元素,不会包括原型链上的属性或方法。
循环顺序是有序 的,按照集合元素的顺序进行遍历。
1 2 3 4 let arr = [1 , 2 , 3 ]; for (let element of arr) { console .log (element); }
for...in
适用于遍历对象的属性。
for...of
适用于遍历可迭代对象的元素。
for...in
遍历属性,for...of
遍历元素。
关于浮点数运算细节: js浮点数运算精度问题:0.1+0.2≠0.3_js中浮点数0.1+0.2-CSDN博客
三元表达式 语法结构
1 2 3 var num = 10 ;var result = num > 5 ? '是的' : '不是的' ;
switch分支语法结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 var num = 1 ; switch (num) { case 1 : console .log (1 ); case 2 : console .log (2 ); case 3 : console .log (3 ); break ; }
break 退出整个循环 1 2 3 4 5 6 7 8 for (var i = 1 ; i <= 5 ; i++) { if (i == 3 ) { break ; } console .log ('我正在吃第' + i + '个包子' ); }
函数返回值注意事项 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 function getSum (num1, num2 ) { return num1 + num2; alert ('我是不会被执行的哦!' ) } console .log (getSum (1 , 2 )); function fn (num1, num2 ) { return num1, num2; } console .log (fn (1 , 2 )); function getResult (num1, num2 ) { return [num1 + num2, num1 - num2, num1 * num2, num1 / num2]; } var re = getResult (1 , 2 ); console .log (re); function fun1 ( ) { return 666 ; } console .log (fun1 ()); function fun2 ( ) { } console .log (fun2 ());
arguments 的使用 1 2 3 4 5 //只有函数才有 arguments对象 而且是每个函数都内置好了这个arguments // 伪数组 并不是真正意义上的数组 // 1. 具有数组的 length 属性 // 2. 按照索引的方式进行存储的 // 3. 它没有真正数组的一些方法 pop() push() 等等
作用域链 : 1 内部函数访问外部函数的变量,采取的是链式查找的方式来决定取那个值 这种结构我们称为作用域链 就近原则
1 2 3 4 5 6 7 8 9 10 11 12 var num = 10 ; function fn ( ) { var num = 20 ; function fun ( ) { console .log (num); } fun (); } fn ();
对象字面量创建对象 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 var obj = { uname : '张三疯' , age : 18 , sex : '男' , sayHi : function ( ) { console .log ('hi~' ); } } console .log (obj.uname ); console .log (obj['age' ]); obj.sayHi ();
console.log() 和console.dir()区别 1 2 3 console.log()可以取代alert()或document.write(),在网页脚本中使用console.log()时,会在浏览器控制台打印出信息。 console.dir()可以显示一个对象所有的属性和方法。
事件三要素 1 2 3 4 5 6 7 8 var btn = document .getElementById ('btn' ); btn.onclick = function ( ) { alert ('点秋香' ); }
innerText 和 innerHTML的区别 1 2 3 4 5 6 7 8 9 var div = document .querySelector ('div' ); div.innerHTML = '<strong>今天是:</strong> 2019' ; var p = document .querySelector ('p' ); console .log (p.innerText ); console .log (p.innerHTML );
焦点事件onfocus 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 var text = document .querySelector ('input' ); text.onfocus = function ( ) { if (this .value === '手机' ) { this .value = '' ; } this .style .color = '#333' ; } text.onblur = function ( ) { if (this .value === '' ) { this .value = '手机' ; } this .style .color = '#999' ; }
可参考的表格结构 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 <table > <thead > <tr > <th > 代码</th > <th > 名称</th > <th > 最新公布净值</th > </tr > </thead > <tbody > <tr > <td > 003526</td > <td > 农银金穗3个月定期开放债券</td > <td > 1.075</td > </tr > <tr > <td > 003526</td > <td > 农银金穗3个月定期开放债券</td > <td > 1.075</td > </tr > <tr > <td > 003526</td > <td > 农银金穗3个月定期开放债券</td > <td > 1.075</td > </tr > <tr > <td > 003526</td > <td > 农银金穗3个月定期开放债券</td > <td > 1.075</td > </tr > <tr > <td > 003526</td > <td > 农银金穗3个月定期开放债券</td > <td > 1.075</td > </tr > <tr > <td > 003526</td > <td > 农银金穗3个月定期开放债券</td > <td > 1.075</td > </tr > </tbody > </table >
H5自定义属性 1 2 3 4 5 6 7 8 9 10 11 12 13 14 var div = document .querySelector ('div' ); console .log (div.getAttribute ('getTime' )); div.setAttribute ('data-time' , 20 ); console .log (div.getAttribute ('data-index' )); console .log (div.getAttribute ('data-list-name' )); console .log (div.dataset ); console .log (div.dataset .index ); console .log (div.dataset ['index' ]); console .log (div.dataset .listName ); console .log (div.dataset ['listName' ]);
子节点 1 2 3 4 5 6 7 8 9 console .log (ol.firstChild ); console .log (ol.lastChild ); console .log (ol.firstElementChild ); console .log (ol.lastElementChild ); console .log (ol.children [0 ]); console .log (ol.children [ol.children .length - 1 ]);
兄弟节点 1 2 3 4 5 6 7 var div = document .querySelector ('div' );console .log (div.nextSibling );console .log (div.previousSibling );console .log (div.nextElementSibling );console .log (div.previousElementSibling );
三种创建元素方式区别 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 var inner = document .querySelector ('.inner' );var arr = [];for (var i = 0 ; i <= 100 ; i++) { arr.push ('<a href="#">百度</a>' ); } inner.innerHTML = arr.join ('' ); var create = document .querySelector ('.create' );for (var i = 0 ; i <= 100 ; i++) { var a = document .createElement ('a' ); create.appendChild (a); }
注册事件三种方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 var btns = document .querySelectorAll ('button' ); btns[0 ].onclick = function ( ) { alert ('hi' ); } btns[0 ].onclick = function ( ) { alert ('hao a u' ); } btns[1 ].addEventListener ('click' , function ( ) { alert (22 ); }) btns[1 ].addEventListener ('click' , function ( ) { alert (33 ); }) btns[2 ].attachEvent ('onclick' , function ( ) { alert (11 ); })
事件委托 1 2 3 4 5 6 7 8 9 var ul = document .querySelector ('ul' ); ul.addEventListener ('click' , function (e ) { e.target .style .backgroundColor = 'pink' ; })
常见事件对象的属性和方法
e.target 返回的是触发事件的对象(元素) , this 返回的是绑定事件的对象(元素)
e.target 指向我们点击的那个对象谁触发了这个事件我们点击的是li ,那么e.target 指向的就是li
给ul 绑定了事件 那么this 就指向ul
1 2 3 4 ul.addEventListener ('click' , function (e ) { console .log (this ); }
currentTarget 事件属性 event.currentTarget 事件属性返回其监听器触发事件的节点,即当前处理该事件的元素、文档或窗口 。
在捕获和起泡阶段,该属性是非常有用的,因为在这两个节点,它不同于event.target 属性。
阻止默认行为 让链接不跳转 或者让提交按钮不提交
1 2 3 4 var a = document .querySelector ('a' ); a.addEventListener ('click' , function (e ) { e.preventDefault (); })
鼠标对象事件 MouseEvent 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 document .addEventListener ('click' , function (e ) { console .log (e.clientX ); console .log (e.clientY ); console .log ('---------------------' ); console .log (e.pageX ); console .log (e.pageY ); console .log ('---------------------' ); console .log (e.screenX ); console .log (e.screenY ); })
键盘对象事件
keyup 按键弹起的时候触发
keydown 按键按下的时候触发 能识别功能键 比如 ctrl shift 左右箭头啊
keypress 按键按下的时候触发 不能识别功能键 比如 ctrl shift 左右箭头啊
三个事件的执行顺序 keydown – keypress – keyup
焦点事件 1 2 3 4 5 6 7 8 9 10 jd_input.addEventListener ('blur' , function ( ) { con.style .display = 'none' ; }) jd_input.addEventListener ('focus' , function ( ) { if (this .value !== '' ) { con.style .display = 'block' ; } })
window.onload
清除定时器 1 2 3 4 5 6 7 8 9 10 11 12 var begin = document .querySelector ('.begin' );var stop = document .querySelector ('.stop' );var timer = null ; begin.addEventListener ('click' , function ( ) { timer = setInterval (function ( ) { console .log ('ni hao ma' ); }, 1000 ); }) stop.addEventListener ('click' , function ( ) { clearInterval (timer); })
this指向问题 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 console .log (this ); function fn ( ) { console .log (this ); } window .fn (); window .setTimeout (function ( ) { console .log (this ); }, 1000 ); var o = { sayHi : function ( ) { console .log (this ); } } o.sayHi (); var btn = document .querySelector ('button' ); btn.addEventListener ('click' , function ( ) { console .log (this ); }) function Fun ( ) { console .log (this ); } var fun = new Fun ();