前端基础-JavaScript
<h2>JavaScript语言基础</h2><h4> ECMAScript和JavaScript的关系是,前者是后者的规格,后者是前者的一种实现;<br> 尽管 ECMAScript 是一个重要的标准,但它并不是 JavaScript 唯一的部分,当然,也不是唯一被标准化的部分。实际上,一个完整的 JavaScript 实现是由以下 3 个不同部分组成的:</h4>
<h4> JS输入 document.body.contentEditable=True # 即可修改网页内容</h4>
<h4><span style="color: rgba(255, 0, 0, 1)"> 核心(ECMAScript)</span> <br> <span style="color: rgba(255, 0, 0, 1)">文档对象模型(DOM) Document object model (整合js,css,html)</span><br><span style="color: rgba(255, 0, 0, 1)"> 浏览器对象模型(BOM) Broswer object model(整合js和浏览器)</span></h4>
<h4> JavaScript引入方式</h4>
<h4><span style="color: rgba(255, 0, 0, 1)"> # 建议卸载head标签中 因为html文件是从上至下执行,谁在前头先执行谁</span></h4>
<h4><span style="color: rgba(255, 0, 0, 1)"> </span>1.Script标签内写代码<br> <script type="text/javascript"><br> // 在这里写你的JS代码 // type="text/javascript" 说明当前script标签中文本的类型<br> </script></h4>
<h4> 2.引入额外的JS文件<br> <script src="js文件名"></script></h4>
<h4> </h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">注释:</span><br> // 这是单行注释</h4>
<h4> /*<br> 这是<br> 多行注释<br> */</h4>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">结束符:</span><br> JavaScript中的语句要以分号(;)为结束符。</h4>
<h4> </h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">声明变量</span><br> JavaScript的变量名可以使用_,数字,字母,$组成,不能以数字开头。<br> 声明变量使用 var 变量名; 的格式来进行声明</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">注意:</span><br> 变量名是区分大小写的。<br> 推荐使用驼峰式命名规则。<br> 保留字(关键字)不能用做变量名。</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">关键字:</span><br> </h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">JavaScript数据类型</span><br> JavaScript拥有动态类型</h4>
<h4> JavaScript不区分整型和浮点型,就只有一种<span style="color: rgba(255, 0, 0, 1)">数字类型</span>。</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">转化数据类型</span> <br> parseInt 转化为数字类型 # 一般用于取整 例如 "20a" 使用后 为20 <br> parseFloat 转回为小数类型<br> </h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span> x; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 此时x是undefined</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> x = 1; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 此时x是数字</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> x = "Alex" <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 此时x是字符串 </span>
<span style="color: rgba(0, 0, 0, 1)">还有一种NaN,表示不是一个数字(Not a Number)。
parseInt(</span>"ABC") <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 返回NaN,NaN属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。</span></pre>
</div>
<p> </p>
<h4><span style="color: rgba(255, 0, 0, 1)"> 字符串(String)</span><br> var x ='字符串'<br> 拼接字符串一般使用"+"</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">常用方法:</span></h4>
<h4> 方法 说明</h4>
<h4> .length 返回长度<br> .trim() 移除空白<br> .trimLeft() 移除左边的空白<br> .trimRight() 移除右边的空白<br> .charAt(n) 返回第n个字符<br> .charCodeAt(n) 返回第n个字符的ascll码<br> .fromCharCode(ascll码) 返回ascll码对应的字符<br> .concat(value, ...) 拼接<br> .indexOf(substring, start) 获取第一次出现在字符串的位置 start为开始查找的位置<br> .lastindexOf(substirng,start) 获取最后一次出现在字符串的位置 start为开始查找的位置<br> .search() 参数可以是正则表达式<br> .replace(匹配字符串/正则表达式,替换成的新字符串) 替换字符串<br> .substring(from, to) 字符串提取,在指定范围内提取字符串,生成新字符串<br> .slice(start, end) 切片<br> .toLowerCase() 小写<br> .toUpperCase() 大写<br> .split(delimiter, limit) 分割(limit可以不传)</h4>
<p> </p>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">slice和substring的区别:</span><br> string.slice(start, stop)和string.substring(start, stop):</h4>
<h4> 两者的相同点:<br> 如果start等于end,返回空字符串<br> 如果stop参数省略,则取到字符串末<br> 如果某个参数超过string的长度,这个参数会被替换为string的长度</h4>
<h4> substirng()的特点:<br> 如果 start > stop ,start和stop将被交换<br> 如果参数是负数或者不是数字,将会被0替换</h4>
<h4> silce()的特点:<br> 如果 start > stop 不会交换两者<br> 如果start小于0,则切割从字符串末尾往前数的第abs(start)个的字符开始(包括该位置的字符)<br> 如果stop小于0,则切割在从字符串末尾往前数的第abs(stop)个字符结束(不包含该位置字符)</h4>
<p> </p>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">布尔值</span><br> 区别于Python,true和false都是小写。</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span> a = <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> b = <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span>""(空字符串)、0、<span style="color: rgba(0, 0, 255, 1)">null</span>、undefined、NaN都是false。</pre>
</div>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">null和undefined</span><br> null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;<br> undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。<br> null表示变量的值是空,undefined则表示只声明了变量,但还没有赋值。</h4>
<h4> </h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">对象(Object)</span><br> JavaScript 中的所有事物都是对象:字符串、数值、数组、函数...此外,JavaScript 允许自定义对象。</h4>
<h4> JavaScript 提供多个内建对象,比如 String、Date、Array 等等。<br> 对象只是带有属性和方法的特殊数据类型。</h4>
<h4><br> 数组 # 数组根据索引取值<br> 数组对象的作用是:使用单独的变量名来存储一系列的值。类似于Python中的列表。</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span> a = ;
console.log(a[</span>1]); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出"ABC"</span></pre>
</div>
<p> </p>
<h4><br> <span style="color: rgba(255, 0, 0, 1)">常用方法:</span><br> 方法 说明<br> .length 数组的大小<br> .push(ele) 尾部追加元素<br> .pop() 获取尾部的元素并删除<br> .unshift(ele) 头部插入元素<br> .shift() 头部移除元素<br> .slice(start, end) 切片<br> .reverse() 反转<br> .join(seq) 将数组元素连接成字符串<br> .concat(val, ...) 连接数组<br> .sort() 排序(非准确排序)<br> .forEach() 将数组的每个元素传递给回调函数<br> .splice() 删除元素,按照索引删除 返回删除当前元素.splice(索引,个数,**args)如果个数是0,可以在**args中增加新元素插入数组中<br> .map(function(item,index,array){return 数据处理}) 返回一个数组元素调用函数处理后的值的新数组</h4>
<h4><span style="color: rgba(255, 0, 0, 1)"> ecma5新增</span></h4>
<h4> .indexOf(substring, start) 获取第一次出现在字符串的位置 start为开始查找的位置<br> <br> .forEach(function(item,index,array){// 遍历数组<br> # item 当前遍历到的元素 <br> # index 当前遍历到的下标<br> # array 当前数组<br> })<br> <br> .reduce(function(pre,next,index,array){ // 归并<br> # pre 上一次遍历return后面的值<br> # next 当前遍历到的元素<br> # index 当前遍历到的下标<br> # array 当前数组<br> })<br> <br> .filter(function(item,index,array){ //过滤<br> return 过滤条件<br> })<br> <br> .some(function(item,index,array){ //判断return表达式在当前数组是否成立 成立返回true 否则false<br> return 条件判断 <br> })<br> <br> .every(function(item,index,array){ //与some一样 但要求每一项都符合,才返回true 有一项<br> return 条件判断 <br> })<br> <br> </h4>
<h4> </h4>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">关于sort()需要注意:</span><br> 如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。<br> 如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:<br> 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。<br> 若 a 等于 b,则返回 0。<br> 若 a 大于 b,则返回一个大于 0 的值。</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">实例:
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> sortNumber(a,b){
</span><span style="color: rgba(0, 0, 255, 1)">return</span> a -<span style="color: rgba(0, 0, 0, 1)"> b
}
</span><span style="color: rgba(0, 0, 255, 1)">var</span> arr1 =
arr1.sort(sortNumber)</span></pre>
</div>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">关于遍历(for循环)可以使用下面的方式:</span></h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span> a = ;
</span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> i=0;i<a.length;i++<span style="color: rgba(0, 0, 0, 1)">) {
console.log(a);}</span></pre>
</div>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">类型查询</span><br> typeof是一个一元运算符(就像++,--,!,- 等一元运算符),不是一个函数,也不是一个语句。</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">对变量或值调用 typeof 运算符将返回下列值之一:</span><br> undefined - 如果变量是 Undefined 类型的<br> boolean - 如果变量是 Boolean 类型的<br> number - 如果变量是 Number 类型的<br> string - 如果变量是 String 类型的<br> object - 如果变量是一种引用类型或 Null 类型的</h4>
<p> </p>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">运算符</span><br> 算数运算符<br> + - * / % ++ --<br> 比较运算符<br> > >= < <= != == === !==<br> <span style="color: rgba(255, 0, 0, 1)">注意:</span><br> 1 == "1" // true 弱等 # 不需要判断数据类型 只需要值相等即可<br> 1 === "1"// false 强等 # 强等需要判断数据类型是否相同 <br> 逻辑运算符<br> && || !<br> 赋值运算符<br> = += -= *= /=</h4>
<h4><br> <span style="color: rgba(255, 0, 0, 1)">流程控制</span><br> if-else</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><span style="color: rgba(0, 0, 0, 1)">示例</span><br>var</span> a = 10<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (a > 5<span style="color: rgba(0, 0, 0, 1)">){
console.log(</span>"yes"<span style="color: rgba(0, 0, 0, 1)">);
}</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
console.log(</span>"no"<span style="color: rgba(0, 0, 0, 1)">);
}</span></pre>
</div>
<h4> if-else if-else</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><span style="color: rgba(0, 0, 0, 1)">示例</span><br>var</span> a = 10<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (a > 5<span style="color: rgba(0, 0, 0, 1)">){
console.log(</span>"a > 5"<span style="color: rgba(0, 0, 0, 1)">);
}</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (a < 5<span style="color: rgba(0, 0, 0, 1)">) {
console.log(</span>"a < 5"<span style="color: rgba(0, 0, 0, 1)">);
}</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
console.log(</span>"a = 5"<span style="color: rgba(0, 0, 0, 1)">);
}</span></pre>
</div>
<h4> switch(多条件判断)</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">示例
</span><span style="color: rgba(0, 0, 255, 1)">var</span> day = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Date().getDay();#判断当前周几返回数字
</span><span style="color: rgba(0, 0, 255, 1)">switch</span><span style="color: rgba(0, 0, 0, 1)"> (day) {#绑定开关
</span><span style="color: rgba(0, 0, 255, 1)">case</span> 0<span style="color: rgba(0, 0, 0, 1)">:#如果是0返回周天
console.log(</span>"Sunday"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> 1<span style="color: rgba(0, 0, 0, 1)">:
console.log(</span>"Monday"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)">:#都不成立执行以下
console.log(</span>"..."<span style="color: rgba(0, 0, 0, 1)">)
}
# switch中的case子句通常都会加break语句,否则程序会继续执行后续case中的语句。</span></pre>
</div>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">循环</span></h4>
<h4><span style="color: rgba(255, 0, 0, 1)"> </span>for循环 #如果要提前结束循环 <span style="color: rgba(255, 0, 0, 1)">break</span> # 如果要跳出循环 <span style="color: rgba(255, 0, 0, 1)">continue</span></h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">示例
</span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> i=0;i<10;i++<span style="color: rgba(0, 0, 0, 1)">) {
console.log(i);
}</span></pre>
</div>
<p> </p>
<h4> do_while循环</h4>
<h4> # 与while区别</h4>
<h4> while是先进行判断后再执行内容 <br> do_while是先执行do中的内容后再进行判断</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">示例
</span><span style="color: rgba(0, 0, 255, 1)">var</span> i=1
<span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)">{
sum</span>+=1<span style="color: rgba(0, 0, 0, 1)">
i</span>++<span style="color: rgba(0, 0, 0, 1)">
}</span><span style="color: rgba(0, 0, 255, 1)">while</span>(i<10<span style="color: rgba(0, 0, 0, 1)">){
console.log(sum)
}</span></pre>
</div>
<p> </p>
<p> </p>
<h4> while循环</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">示例
</span><span style="color: rgba(0, 0, 255, 1)">var</span> i = 0<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">while</span> (i < 10<span style="color: rgba(0, 0, 0, 1)">) {
console.log(i);
i</span>++<span style="color: rgba(0, 0, 0, 1)">;#i自增1
}</span></pre>
</div>
<p> </p>
<h4><span style="color: rgba(255, 0, 0, 1)"> 三元运算</span></h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">示例
</span><span style="color: rgba(0, 0, 255, 1)">var</span> a = 1<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> b = 2<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> c = a > b ? a (true返回的值): b(false返回的值)</pre>
</div>
<h4> </h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">补充:前端抛错 跟python中raise类似</span><br> throw关键字<br> 例如:<br> if(error) throw error</h4>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">函数 function 定义函数关键字</span></h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 普通函数定义</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> f1() {
console.log(</span>"Hello world!"<span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 带参数的函数#JS函数传参数多或少都不会报错</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> f2(a, b) {
console.log(arguments);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 内置的arguments对象</span>
<span style="color: rgba(0, 0, 0, 1)"> console.log(arguments.length);
console.log(a, b);
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 带返回值的函数</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> sum(a, b){
</span><span style="color: rgba(0, 0, 255, 1)">return</span> a +<span style="color: rgba(0, 0, 0, 1)"> b;
}
sum(</span>1, 2);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 调用函数</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 匿名函数方式</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> sum = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(a, b){
</span><span style="color: rgba(0, 0, 255, 1)">return</span> a +<span style="color: rgba(0, 0, 0, 1)"> b;
}
sum(</span>1, 2<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 立即执行函数#只能执行一遍#外部访问不到函数内部定义的变量(用立即执行函数防止变量污染全局)</span>
(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(a, b){
</span><span style="color: rgba(0, 0, 255, 1)">return</span> a +<span style="color: rgba(0, 0, 0, 1)"> b;
})(</span>1, 2);</pre>
</div>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">函数中的arguments参数</span><br> arguments把传入的参数都显示出来 以数组的形式展现<br> arguments.length 传入参数的长度</h4>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">注意:</span><br> <span style="color: rgba(255, 0, 0, 1)">函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</span></h4>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">函数的全局变量和局部变量</span><br> <span style="color: rgba(255, 0, 0, 1)"> 局部变量:</span><br> 在JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它(该变量的作用域是函数内部)。只要函数运行完毕,本地变量就会被删除。</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)"> 全局变量:</span><br> 在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)"> 变量生存周期:</span><br> JavaScript变量的生命期从它们被声明的时间开始。<br> 局部变量会在函数运行以后被删除。<br> 全局变量会在页面关闭后被删除。</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">作用域:</span><br> 首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层。<br> 调用函数的时候要往回找函数定义阶段;</h4>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">闭包</span></h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span> city = "BeiJing"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> f(){
</span><span style="color: rgba(0, 0, 255, 1)"> var</span> city = "ShangHai"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> inner(){
console.log(city);
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> inner;
}
</span><span style="color: rgba(0, 0, 255, 1)">var</span> ret =<span style="color: rgba(0, 0, 0, 1)"> f();
ret();</span></pre>
</div>
<p> </p>
<h4><span style="color: rgba(255, 0, 0, 1)"> 词法分析</span><br> JavaScript中在调用函数的那一瞬间,会先进行词法分析。</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">词法分析的过程:</span><br> 当函数调用的前一瞬间,会先形成一个激活对象:Avtive Object(AO),并会分析以下3个方面:</h4>
<h4> 1:函数参数,如果有,则将此参数赋值给AO,且值为undefined。如果没有,则不做任何操作。<br> 2:函数局部变量,如果AO上有同名的值,则不做任何操作。如果没有,则将此变量赋值给AO,并且值为undefined。<br> 3:函数声明,如果AO上有,则会将AO上的对象覆盖。如果没有,则不做任何操作。</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">函数内部无论是使用参数还是使用局部变量都到AO上找。</span></h4>
<p> </p>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">内置对象和方法</span><br> 两种创建方法<br> 1.直接创建<br> 2. new + 内置对象创建<br> 注意var s1 = "abc"和var s2 = new String("abc")的区别:typeof s1 --> string而 typeof s2 --> Object</h4>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">数据类型:</span><br> Number 数字对象<br> String 字符串对象<br> Boolean 布尔值对象<br> <span style="color: rgba(255, 0, 0, 1)">组合对象:</span><br> Array 数组对象<br> Math 数学对象<br> Date 日期对象<br> <span style="color: rgba(255, 0, 0, 1)">高级对象:</span><br> Object 自定义对象<br> Error 错误对象<br> Function 函数对象<br> RegExp 正则表达式对象<br> Global 全局对象</h4>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">自定义对象#JavaScript的对象(Object)本质上是键值对的集合(Hash结构),但是只能用字符串作为键。</span></h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">直接创建示例:
</span><span style="color: rgba(0, 0, 255, 1)">var</span> a = {"name": "Alex", "age": 18<span style="color: rgba(0, 0, 0, 1)">};#自定义对象
console.log(a.name);#一种取值
console.log(a[</span>"age"<span style="color: rgba(0, 0, 0, 1)">]);#另一种取值
遍历对象中的内容:
</span><span style="color: rgba(0, 0, 255, 1)">var</span> a = {"name": "Alex", "age": 18<span style="color: rgba(0, 0, 0, 1)">};
</span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> i <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> a){
console.log(i, a);#i为键名 a为对象
}</span></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">对象创建示例:
</span><span style="color: rgba(0, 0, 255, 1)">var</span> person=<span style="color: rgba(0, 0, 255, 1)">new</span> Object();<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 创建一个person对象</span>
person.name="Alex";<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> person对象的name属性</span>
person.age=18;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> person对象的age属性<br><span style="color: rgba(0, 0, 0, 1)">delete person.name;</span> // 删除属性<br></span></pre>
</div>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">内置的Date对象</span><br> 创建Date对象<br> var d1=new Date()</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">Date对象方法</span><br> Date() 返回当日的日期和时间。<br> getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。<br> getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。<br> getMonth() 从 Date 对象返回月份 (0 ~ 11)。<br> getFullYear() 从 Date 对象以四位数字返回年份。<br> getYear() 请使用 getFullYear() 方法代替。<br> getHours() 返回 Date 对象的小时 (0 ~ 23)。<br> getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。<br> getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。<br> getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。<br> getTime() 返回 1970 年 1 月 1 日至今的毫秒数。<br> getTimezoneOffset() 返回本地时间与格林威治标准时间 (GMT) 的分钟差。<br> getUTCDate() 根据世界时从 Date 对象返回月中的一天 (1 ~ 31)。<br> getUTCDay() 根据世界时从 Date 对象返回周中的一天 (0 ~ 6)。<br> getUTCMonth() 根据世界时从 Date 对象返回月份 (0 ~ 11)。<br> getUTCFullYear() 根据世界时从 Date 对象返回四位数的年份。<br> getUTCHours() 根据世界时返回 Date 对象的小时 (0 ~ 23)。<br> getUTCMinutes() 根据世界时返回 Date 对象的分钟 (0 ~ 59)。<br> getUTCSeconds() 根据世界时返回 Date 对象的秒钟 (0 ~ 59)。<br> getUTCMilliseconds() 根据世界时返回 Date 对象的毫秒(0 ~ 999)。<br> parse() 返回1970年1月1日午夜到指定日期(字符串)的毫秒数。<br> setDate() 设置 Date 对象中月的某一天 (1 ~ 31)。<br> setMonth() 设置 Date 对象中月份 (0 ~ 11)。<br> setFullYear() 设置 Date 对象中的年份(四位数字)。<br> setYear() 请使用 setFullYear() 方法代替。<br> setHours() 设置 Date 对象中的小时 (0 ~ 23)。<br> setMinutes() 设置 Date 对象中的分钟 (0 ~ 59)。<br> setSeconds() 设置 Date 对象中的秒钟 (0 ~ 59)。<br> setMilliseconds() 设置 Date 对象中的毫秒 (0 ~ 999)。<br> setTime() 以毫秒设置 Date 对象。<br> setUTCDate() 根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。<br> setUTCMonth() 根据世界时设置 Date 对象中的月份 (0 ~ 11)。<br> setUTCFullYear() 根据世界时设置 Date 对象中的年份(四位数字)。<br> setUTCHours() 根据世界时设置 Date 对象中的小时 (0 ~ 23)。<br> setUTCMinutes() 根据世界时设置 Date 对象中的分钟 (0 ~ 59)。<br> setUTCSeconds() 根据世界时设置 Date 对象中的秒钟 (0 ~ 59)。<br> setUTCMilliseconds() 根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。<br> toSource() 返回该对象的源代码。<br> toString() 把 Date 对象转换为字符串。<br> toTimeString() 把 Date 对象的时间部分转换为字符串。<br> toDateString() 把 Date 对象的日期部分转换为字符串。<br> toGMTString() 请使用 toUTCString() 方法代替。<br> toUTCString() 根据世界时,把 Date 对象转换为字符串。<br> toLocaleString() 根据本地时间格式,把 Date 对象转换为字符串。<br> toLocaleTimeString() 根据本地时间格式,把 Date 对象的时间部分转换为字符串。<br> toLocaleDateString() 根据本地时间格式,把 Date 对象的日期部分转换为字符串。<br> UTC() 根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数。<br> valueOf() 返回 Date 对象的原始值。</h4>
<h4> </h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">****JSON对象</span><br> JSON字符串转化为对象<br> var obj = JSON.parse(str1)<br> 对象转换为JSON字符串<br> var str=JSON.stringify(obj1)</h4>
<p> </p>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)"> Math对象</span><br> abs(x) 返回数的绝对值。<br> exp(x) 返回 e 的指数。<br> floor(x) 对数进行下舍入。<br> log(x) 返回数的自然对数(底为e)。<br> max(x,y) 返回 x 和 y 中的最高值。<br> min(x,y) 返回 x 和 y 中的最低值。<br> pow(x,y) 返回 x 的 y 次幂。<br> random() 返回 0 ~ 1 之间的随机数。<br> round(x) 把数四舍五入为最接近的整数。<br> sin(x) 返回数的正弦。<br> sqrt(x) 返回数的平方根。<br> tan(x) 返回角的正切。</h4>
<p> </p>
<h4><span style="color: rgba(255, 0, 0, 1)"> RegExp对象#正则</span><br> <span style="color: rgba(255, 0, 0, 1)"> 坑:</span><br> # 正则表达式中一定不要加空格;<br> # 如果text 待匹配字符不传值 默认传字符形式的 undefined 来判断;<br> # 当正则表达式使用了全局模式(g),并且还让他检测一个字符串,此时会引出lastIndex,lastIndex会记住上一次匹配成功的位置,并把下一次要开始校验的位置记住;</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">创建对象</span><br> 方法1:<br> var re=new RegExp("正则表达式")<br> re.text(待匹配字符)#判断待匹配字符是否符合正则 返回布尔值<br> 方法2:<br> /正则表达式/.texe(待匹配字符)</h4>
<h4><br> <span style="color: rgba(255, 0, 0, 1)">// 关于匹配模式:g和i的简单示例</span><br> var s1 = "name:Alex age:18";</h4>
<h4> s1.replace(/a/, "哈哈哈"); // "n哈哈哈me:Alex age:18"<br> s1.replace(/a/g, "哈哈哈"); // "n哈哈哈me:Alex 哈哈哈ge:18" 全局匹配<br> s1.replace(/a/gi, "哈哈哈"); // "n哈哈哈me:哈哈哈lex 哈哈哈ge:18"全局匹配+不区分大小写</h4>
<h4><br> <span style="color: rgba(255, 0, 0, 1)">// String对象与正则结合的4个方法</span><br> var s2 = "hello world";</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">s2.match(/o/g); // ["o", "o"] 查找字符串中 符合正则 的内容</span><br><span style="color: rgba(255, 0, 0, 1)"> s2.search(/h/g); // 0 查找字符串中符合正则表达式的内容位置</span><br><span style="color: rgba(255, 0, 0, 1)"> s2.split(/o/g); // ["hell", " w", "rld"]按照正则表达式对字符串进行切割</span><br><span style="color: rgba(255, 0, 0, 1)"> s2.replace(/o/g, "s");// "hells wsrld" 对字符串按照正则进行替换</span></h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">// 关于分组 分组按$取 例如 $1</span></h4>
<h2>BOM和DOM</h2>
<h4> BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏览器进行“对话”。</h4>
<h4> DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。</h4>
<h4> </h4>
<h4> BOM:</h4>
<h4> Window对象是客户端JavaScript最高层对象之一,由于window对象是其它大部分对象的共同祖先,在调用window对象的方法和属性时,可以省略window对象的引用。例如:window.document.write()可以简写成:document.write()。</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">window对象</span><br> 所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。<br> 全局变量是 window 对象的属性。全局函数是 window 对象的方法。</h4>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">一些常用的Window方法:</span><br> window.innerHeight - 浏览器窗口的内部高度</h4>
<h4> window.innerWidth - 浏览器窗口的内部宽度</h4>
<h4> window.open() - 打开新窗口</h4>
<h4> window.open(URL,name,features,replace)</h4>
<h4> window.close() - 关闭当前窗口</h4>
<h4> window.opener - 父窗口 可以直接.父窗定义好的函数 父窗口执行</h4>
<h4> 参数 描述<br> URL 一个可选的字符串,声明了要在新窗口中显示的文档的 URL。如果省略了这个参数,或者它的值是空字符串,那么新窗口就不会显示任何文档。</h4>
<h4> name 一个可选的字符串,该字符串是一个由逗号分隔的特征列表,其中包括数字、字母和下划线,该字符声明了新窗口的名称。这个名称可以用作标记 <a> 和 <form> 的属性 target 的值。如果该参数指定了一个已经存在的窗口,那么 open() 方法就不再创建一个新窗口,而只是返回对指定窗口的引用。在这种情况下,features 将被忽略。</h4>
<h4> features 一个可选的字符串,声明了新窗口要显示的标准浏览器的特征。如果省略该参数,新窗口将具有所有标准特征。在窗口特征这个表格中,我们对该字符串的格式进行了详细的说明。</h4>
<h4> replace 一个可选的布尔值。规定了装载到窗口的 URL 是在窗口的浏览历史中创建一个新条目,还是替换浏览历史中的当前条目。支持下面的值:true - URL 替换浏览历史中的当前条目。false - URL 在浏览历史中创建新的条目。</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">demo:</span> window.open ('URL', 'newwindow', 'height=100, width=400, top=0,left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no') </h4>
<h4> demo参数解释: <br> <SCRIPT LANGUAGE="javascript"> js脚本开始; <br> window.open 弹出新窗口的命令; <br> URL:URL; <br> 'newwindow' 弹出窗口的名字(不是文件名),非必须,可用空''代替; <br> height=100 窗口高度; <br> width=400 窗口宽度; <br> top=0 窗口距离屏幕上方的象素值; <br> left=0 窗口距离屏幕左侧的象素值; <br> toolbar=no 是否显示工具栏,yes为显示; <br> menubar,scrollbars 表示菜单栏和滚动栏。 <br> resizable=no 是否允许改变窗口大小,yes为允许; <br> location=no 是否显示地址栏,yes为允许; <br> status=no 是否显示状态栏内的信息(通常是文件已经打开),yes为允许; <br> </SCRIPT> js脚本结束</h4>
<h4> </h4>
<h4> <span style="color: rgba(255, 0, 0, 1)"> window的子对象 # </span>navigator对象(了解即可)</h4>
<h4> 浏览器对象,通过这个对象可以判定用户所使用的浏览器,包含了浏览器相关信息。<br> navigator.appName // Web浏览器全称<br> navigator.appVersion // Web浏览器厂商和版本的详细字符串<br> navigator.userAgent // 客户端绝大部分信息<br> navigator.platform // 浏览器运行所在的操作系统</h4>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">screen对象(了解即可)屏幕对象,不常用。</span></h4>
<h4> 一些属性:<br> screen.availWidth - 可用的屏幕宽度<br> screen.availHeight - 可用的屏幕高度</h4>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">history对象(了解即可)</span><br> window.history 对象包含浏览器的历史。</h4>
<h4> 浏览历史对象,包含了用户对当前页面的浏览历史,但我们无法查看具体的地址,可以简单的用来前进或后退一个页面。<br> history.forward()// 前进一页<br> history.back()// 后退一页</h4>
<p> </p>
<p> </p>
<h4><span style="color: rgba(255, 0, 0, 1)"> </span> <span style="color: rgba(255, 0, 0, 1)">local对象</span><br> window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面。</h4>
<h4> 常用属性和方法:</h4>
<h4> location.href 获取URL<br> location.href="URL" // 跳转到指定页面<br> location.assign(url)// 跳转指定页面<br> location.reload() 重新加载页面 可以传参 如果为true 强制加载 从服务区源头加载<br> location.replace(url)// 用新url替换当前页面,可以避免跳转前的历史记录 <br> location.hash# 锚点 实现页内跳转<br> location.post # 浏览器的端口号</h4>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">弹出框</span><br><span style="color: rgba(255, 0, 0, 1)"> 警告框</span></h4>
<h4> 警告框经常用于确保用户可以得到某些信息。<br> 当警告框出现后,用户需要点击确定按钮才能继续进行操作。 <span style="color: rgba(255, 0, 0, 1)">alert("你看到了吗?");</span></h4>
<p> </p>
<h4><span style="color: rgba(255, 0, 0, 1)"> 确认框</span></h4>
<h4> 确认框用于使用户可以验证或者接受某些信息。<br> 当确认框出现后,用户需要点击确定或者取消按钮才能继续进行操作。<br> 如果用户点击确认,那么返回值为 true。如果用户点击取消,那么返回值为 false。<span style="color: rgba(255, 0, 0, 1)">confirm("你确定吗?")</span></h4>
<p><span style="color: rgba(255, 0, 0, 1)"> </span></p>
<h4><span style="color: rgba(255, 0, 0, 1)"> 提示框</span></h4>
<h4> 提示框经常用于提示用户在进入页面前输入某个值。<br> 当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。<br> 如果用户点击确认,那么返回值为输入的值。如果用户点击取消,那么返回值为 null。 <span style="color: rgba(255, 0, 0, 1)">prompt("请在下方输入","你的答案")</span></h4>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">计时相关</span><br> 通过使用 JavaScript,我们可以在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。<br> <span style="color: rgba(255, 0, 0, 1)">setTimeout()</span><br> 语法:<br> var t=setTimeout("JS语句",毫秒)<br> setTimeout() 方法会返回某个值。在上面的语句中,值被储存在名为 t 的变量中。假如你希望取消这个 setTimeout(),你可以使用这个变量名来指定它。<br> setTimeout() 的第一个参数是含有 JavaScript 语句的字符串。这个语句可能诸如 "alert('5 seconds!')",或者对函数的调用,诸如 alertMsg()"。第二个参数指示从当前起多少毫秒后执行第一个参数(1000 毫秒等于一秒)。<br> <span style="color: rgba(255, 0, 0, 1)">clearTimeout() # 清除计时任务</span><br> 语法:<br> clearTimeout(setTimeout_variable) # 例如上例的t</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">setInterval() # 每隔多长时间做某事</span><br> 语法:<br> setInterval("JS语句",时间间隔)<br> <span style="color: rgba(255, 0, 0, 1)">返回值</span><br> 一个可以传递给 Window.clearInterval() 从而取消对 code 的周期性执行的值。<br> setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。<br> setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">clearInterval() # 清除每隔多长时间做某事</span><br> 语法:<br> clearInterval(setinterval返回的ID值)<br> clearInterval() 方法可取消由 setInterval() 设置的 timeout。<br> clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值。</h4>
<p> </p>
<p> </p>
<h4> DOM<br> DOM(Document Object Model)是一套对文档的内容进行抽象和概念化的方法。 <br> 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。<br> HTML DOM 模型被构造为对象的树。</h4>
<h4> DOM标准规定HTML文档中的每个成分都是一个节点(node):<br> 文档节点(document对象):代表整个文档<br> 元素节点(element 对象):代表一个元素(标签) <br> 属性节点(attribute对象):代表一个属性,元素(标签)才有属性<br> 注释是注释节点(comment对象) </h4>
<h4> JavaScript 可以通过DOM创建动态的 HTML:<br> JavaScript 能够改变页面中的所有 HTML 元素<br> JavaScript 能够改变页面中的所有 HTML 属性<br> JavaScript 能够改变页面中的所有 CSS 样式<br> JavaScript 能够对页面中的所有事件做出反应<br> <span style="color: rgba(255, 0, 0, 1)">注意:</span><br> 涉及到DOM操作的JS代码应该放在文档的哪个位置。</h4>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)"> 查找标签</span><br> 直接查找<br> document.getElementById 根据ID获取一个标签<br> document.getElementsByClassName 根据class属性获取标签<br> document.getElementsByTagName 根据标签名获取标签合集<br> </h4>
<h4> document.getElementsByName 根据name属性获取标签 # name属性一般情况下 只有input标签节点才有</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">补充:</span><br> document.queryselector("选择器") # 返回文档中匹配指定 CSS 选择器的一个元素。</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">间接查找</span><br> parentElement 父节点标签元素 // parentNodes 父节点<br> children 所有子标签 //childNodes 子节点<br> firstElementChild 第一个子标签元素<br> lastElementChild 最后一个子标签元素<br> nextElementSibling 下一个兄弟标签元素<br> previousElementSibling 上一个兄弟标签元素</h4>
<p> </p>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">节点操作</span><br> <span style="color: rgba(255, 0, 0, 1)">创建节点</span><br> document.createElement(标签名)</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">添加节点</span><br> 追加一个子节点(作为最后的子节点)<br> somenode.appendChild(newnode);</h4>
<h4> 把增加的节点放到某个节点的前边。<br> somenode.insertBefore(newnode,某个节点);</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">删除节点</span><br> 获得要删除的元素,通过父元素调用该方法删除。<br> somenode.removeChild(要删除的节点) // 要删除的标签节点.parentNode.removeChild(要删除的节点)</h4>
<h4><span style="color: rgba(255, 0, 0, 1)"> 替换节点</span><br> somenode.replaceChild(newnode, 某个节点);</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">克隆节点</span><br> somenone.cloneNode() // 默认false 传入true就会复制元素节点html内容</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">属性节点</span><br> 获取文本节点的值:<br> var divEle = document.getElementById("d1")<br> divEle.innerText # 只获得文本<br> divEle.innerHTML # 获取标签</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">设置文本节点的值:</span><br> var divEle = document.getElementById("d1")<br> divEle.innerText='值'#设置文本<br> divEle.innerHTML='值'#设置标签</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">属性操作# attribute操作</span><br> var divEle = document.getElementById("d1");<br> divEle.setAttribute("age","18") # 设置自定义属性也可以设置自带属性<br> divEle.getAttribute("age") # 获取自定义属性也可以获取自带属性<br> divEle.removeAttribute("age") # 删除自定义属性也可以删除自带属性</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">// 自带的属性还可以直接.属性名来获取和设置</span><br> imgEle.src<br> imgEle.src="..."</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">获取值操作</span><br> elementNode.value<br> 适用于以下标签:<br> .input <br> .select<br> .textarea <br> <span style="color: rgba(255, 0, 0, 1)">例如</span><br> var iEle = document.getElementById("i1");<br> console.log(iEle.value);</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">class的操作</span><br> className获取所有样式类名(字符串)<br> # className = "" # 设置类属性</h4>
<h4> classList.remove(cls)删除指定类<br> classList.add(cls)添加类<br> classList.contains(cls)存在返回true,否则返回false<br> classList.toggle(cls)存在就删除,否则添加</h4>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">指定CSS操作</span><br> JS操作CSS属性的规律:<br> 1.对于没有中横线的CSS属性一般直接使用style.属性名即可。如:</h4>
<h4> obj.style.margin=<br> obj.style.width=<br> obj.style.left=<br> obj.style.position=</h4>
<h4> 2.对含有中横线的CSS属性,将中横线后面的第一个字母换成大写即可。如:</h4>
<h4> obj.style.marginTop=<br> obj.style.borderLeftWidth=<br> obj.style.zIndex=<br> obj.style.fontFamily=</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)"> 事件</span><br><span style="color: rgba(255, 0, 0, 1)"> 常用事件</span><br> onclick 当用户点击某个对象时调用的事件句柄。<br> ondblclick 当用户双击某个对象时调用的事件句柄。</h4>
<h4> onfocus 元素获得焦点。 // 练习:输入框<br> onblur 元素失去焦点。 应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.<br> onchange 域的内容被改变。 应用场景:通常用于表单元素,当元素内容被改变时触发.(select联动)</h4>
<h4> onkeydown 某个键盘按键被按下。 应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.<br> onkeypress 某个键盘按键被按下并松开。<br> onkeyup 某个键盘按键被松开。<br> onload 一张页面或一幅图像完成加载。 # window.onload=functon(){} 页面加载完成后执行<br> <br> onmousedown 鼠标按钮被按下。<br> onmousemove 鼠标被移动。<br> onmouseout 鼠标从某元素移开。<br> onmouseover 鼠标移到某元素之上。</h4>
<h4> onselect 在文本框中的文本被选中时发生。<br> onsubmit 确认按钮被点击,使用的对象是form。</h4>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">补充: 事件对象</span><br><span style="color: rgba(255, 0, 0, 1)"> # 如何获取事件对象 Demo</span></h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">HTML<br><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">type</span><span style="color: rgba(0, 0, 255, 1)">="button"</span><span style="color: rgba(255, 0, 0, 1)"> id</span><span style="color: rgba(0, 0, 255, 1)">="b1"</span><span style="color: rgba(0, 0, 255, 1)">></span>按钮<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">JavaScript</span><br>window.onload = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
b1 </span>= document.getElementById("b1"<span style="color: rgba(0, 0, 0, 1)">)
b1.onclick </span>= <span style="color: rgba(0, 0, 255, 1)">function</span>(e){<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 这里的e 就是事件对象</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> eve = e || event<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 为了兼容ie浏览器 ie浏览器事件对象是window.event</span>
<span style="color: rgba(0, 0, 0, 1)"> console.log(eve)
}
}</span></pre>
</div>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">事件流</span><br><span style="color: rgba(255, 0, 0, 1)"> </span>事件流描述的是页面接受事件的顺序<br> 事件流的三个阶段: 捕获,目标,冒泡</h4>
<p> </p>
<h4> <span style="color: rgba(255, 0, 0, 1)">事件对象详情</span><br> eve.currentTarget # 当前捕获节点的引用<br> eve.pageX # 事件发生点当前文档横坐标<br> eve.pageY # 事件发生点当前文档纵坐标<br> eve.target # 产生事件的节点引用<br> eve.type # 产生事件的类型 例如 click<br> eve.which # 针对键盘和鼠标事件</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">eve属性</span></h4>
<h4> 属性 描述<br> altKey 返回当事件被触发时,”ALT” 是否被按下。<br> button 返回当事件被触发时,哪个鼠标按钮被点击。<br> clientX 返回当事件被触发时,鼠标指针的水平坐标。<br> clientY 返回当事件被触发时,鼠标指针的垂直坐标。<br> ctrlKey 返回当事件被触发时,”CTRL” 键是否被按下。<br> metaKey 返回当事件被触发时,”meta” 键是否被按下。<br> relatedTarget 返回与事件的目标节点相关的节点。<br> screenX 返回当某个事件被触发时,鼠标指针的水平坐标。<br> screenY 返回当某个事件被触发时,鼠标指针的垂直坐标。<br> shiftKey 返回当事件被触发时,”SHIFT” 键是否被按下。</h4>
<h4><span style="color: rgba(255, 0, 0, 1)"> IE 属性(除了上面的鼠标/事件属性,IE 浏览器还支持下面的属性)</span></h4>
<h4> 属性 描述<br> cancelBubble 如果事件句柄想阻止事件传播到包容对象,必须把该属性设为 true。<br> fromElement 对于 mouseover 和 mouseout 事件,fromElement 引用移出鼠标的元素。<br> keyCode 对于 keypress 事件,该属性声明了被敲击的键生成的 Unicode 字符码。对于 keydown 和 keyup<br> offsetX,offsetY 发生事件的地点在事件源元素的坐标系统中的 x 坐标和 y 坐标。<br> returnValue 如果设置了该属性,它的值比事件句柄的返回值优先级高。把这个属性设置为<br> srcElement 对于生成事件的 Window 对象、Document 对象或 Element 对象的引用。<br> toElement 对于 mouseover 和 mouseout 事件,该属性引用移入鼠标的元素。<br> x,y 事件发生的位置的 x 坐标和 y 坐标,它们相对于用CSS动态定位的最内层包容元素。</h4>
<h4> <br> <span style="color: rgba(255, 0, 0, 1)"> 标准 Event 属性 下面列出了 2 级 DOM 事件标准定义的属性</span></h4>
<h4> 属性和方法 描述<br> bubbles 返回布尔值,指示事件是否是起泡事件类型。<br> cancelable 返回布尔值,指示事件是否可拥可取消的默认动作。<br> currentTarget 返回其事件监听器触发该事件的元素。<br> eventPhase 返回事件传播的当前阶段。<br> target 返回触发此事件的元素(事件的目标节点)。<br> timeStamp 返回事件生成的日期和时间。<br> type 返回当前 Event 对象表示的事件的名称。<br> initEvent() 初始化新创建的 Event 对象的属性。<br> preventDefault() 通知浏览器不要执行与事件关联的默认动作。<br> stopPropagation() 不再派发事件。</h4>
<h4> </h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">Event对象的一些兼容写法</span><br> 获得event对象兼容性写法 <br> event || (event = window.event);<br> 获得target兼容型写法 <br> event.target||event.srcElement<br> 阻止浏览器默认行为兼容性写法 <br> event.preventDefault ? event.preventDefault() : (event.returnValue = false);<br> 阻止冒泡写法 <br> event.stopPropagation ? event.stopPropagation() : (event.cancelBubble = true);</h4>
<h4> <span style="color: rgba(255, 0, 0, 1)">阻止冒泡的方法</span><br> eve.cancelBubble = true<br> eve.stopPropagation()<br> <br> <span style="color: rgba(255, 0, 0, 1)">事件委托</span><br> 父标签.事件 = function(){<br> tag = event.target||event.srcElement<br> if(tag.nodeName == "子标签name"){<br> 对应事件操作 <br> }<br> }<br> <br> <span style="color: rgba(255, 0, 0, 1)">事件绑定和取消事件绑定方法的形式</span><br> 添加事件监听器: <br> # dom指的是当前节点<br> dom.addEventListener(事件名,处理函数,布尔值)<br> 移除事件监听器:<br> dom.removeEventListener(事件名,处理函数)<br> ie下的事件监听器<br> 添加: <br> dom.attachEvent(事件名,处理函数)<br> 移除:<br> dom.detachEvent(事件名,处理函数)<br> </h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">事件绑定</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> on(dom, eventType, fn) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)">(dom.addEventListener) {
dom.addEventListener(eventType, fn);
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)">(dom.attachEvent) {
dom.attachEvent(</span>'on' +<span style="color: rgba(0, 0, 0, 1)"> eventType, fn);
}
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">取消事件绑定</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> un(dom, eventType, fn) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)">(dom.removeEventListener) {
dom.removeEventListener(eventType, fn, </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">);
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)">(dom.detachEvent) {
dom.detachEvent(</span>"on" +<span style="color: rgba(0, 0, 0, 1)"> eventType, fn)
}
}
}</span></pre>
</div>
<p> </p>
<p> </p>
<h4><br> <span style="color: rgba(255, 0, 0, 1)">绑定方法 #this 代表的是出发的当前标签</span></h4>
<h4> 1.直接在html文件里面绑定事件=function(){内容}<br><br></h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">例如:
</span><div id="d1" onclick="changeColor(this);">点我</div>
<script>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> changeColor(ths) {
ths.style.backgroundColor</span>="green"<span style="color: rgba(0, 0, 0, 1)">;
}
</span></script>
<span style="color: rgba(255, 0, 0, 1)">注意:
this是实参,表示触发事件的当前元素。
函数定义过程中的ths为形参。</span></pre>
</div>
<p> </p>
<h4><br> 2.写在JS文件中,通过JS代码绑定#可用循环批量处理</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">例如:
</span><div id="d2">点我</div>
<script>
<span style="color: rgba(0, 0, 255, 1)">var</span> divEle2 = document.getElementById("d2"<span style="color: rgba(0, 0, 0, 1)">);
divEle2.onclick</span>=<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.innerText="呵呵"<span style="color: rgba(0, 0, 0, 1)">;
}
</span></script></pre>
</div>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<h2><br><span style="color: rgba(255, 0, 0, 1)">严格模式</span></h2>
<h4> # 在严格模式下,浏览器会对JS的要求更加苛刻<br> 关键字 <span style="color: rgba(255, 0, 0, 1)">"use strict"</span><br> "use strict"写在那个作用域下,这个作用域下所有代码遵循严格模式<br> <span style="color: rgba(255, 0, 0, 1)"> Ps: 尽量不要在全局作用域下使用</span><br><br> demo:<br> 未使用严格模式<br> function demo1(){<br> max = 10// 如果在给变量赋值时,没有使用var声明则当前全局变量进行处理<br> }<br> <br> 使用严格模式<br> function demo2(){<br> "use strict"<br> max = 10 // 严格模式下 报错<br> }</h4>
<p> </p>
<p> </p>
<p> </p>
<h4><br> <span style="color: rgba(255, 0, 0, 1)">cookie </span></h4>
<h4> 查询cookie <br> document.cookie<br> 设置cookie<br> document.cookie = "key=value"+data # date 过期日期<br> var date = new Date<br> date.setDate(date.getDate()+num)<br> 修改cookie<br> document.cookie = "key=value2" # 相同的key会覆盖 达到修改的效果<br> 删除cookie<br> document.cookie = "key=value"+data # date 过期日期<br> var date = new Date<br> date.setDate(date.getDate()-num) # 时间小于当前时间 删除</h4>
</div>
<div id="MySignature" role="contentinfo">
Songzhibin<br><br>
来源:https://www.cnblogs.com/binHome/p/11813884.html
頁:
[1]