我的个性百度搜不到 發表於 2019-8-20 11:18:00

JavaScript

<h1 id="javascript之语法">JavaScript之语法</h1>
<h2 id="一概述">一、概述</h2>
<p>面向对象的编程语言,也称为浏览器解释型语言。</p>
<p>嵌入到HTML中交给浏览器去解释和执行。</p>
<h3 id="1-组成">1. 组成</h3>
<ul>
<li>核心语法(ECMAScript5)</li>
<li>BOM(Browser Object Model)浏览器对象模型,提供操作窗口的方法</li>
<li>DOM(Document Object Model)文档对象模型,提供操作页面元素的方法</li>
<li>Ajax 前后端交互的技术,异步页面刷新(json交互)</li>
<li>jQuery(JS工具)</li>
</ul>
<h2 id="二基本使用">二、基本使用</h2>
<h3 id="1-引入js">1. 引入JS</h3>
<ul>
<li>
<p>元素绑定事件方式书写JS代码</p>
<p>事件:用户的行为或元素的状态。例:<code>onclick</code>(单击)</p>
<p>事件处理:事件发生后的响应</p>
<p>语法:将事件的名称以标签属性的方式绑定到元素上</p>
</li>
<li>
<p>内嵌</p>
<p>例:<code>&lt;div onclick=""&gt;xx&lt;/div&gt;</code></p>
</li>
</ul>
<blockquote>
<p>借助<code>&lt;script&gt;&lt;/script&gt;</code>嵌入JS代码,可以书写任意多次,书写在任意位置。不同的书写位置会影响代码执行的结果。书写位置即为JS代码执行的位置</p>
</blockquote>
<ul>
<li>
<p>外链</p>
<p>创建外部的js文件(***.js),引入方式:在HTML中使用<code>&lt;script&gt;&lt;/script&gt;</code></p>
<p>注意:script标签只能内嵌或外链二选一</p>
</li>
</ul>
<p>JS基础语句:</p>
<p><code>alert("");</code>警告框</p>
<p><code>console.log("","");</code>控制台输出</p>
<p><code>prompt("");</code>带输入框的弹框</p>
<p><code>document.write();</code>网页写入(如果写入的内容为标签语法,则解析后呈现),<code>wrtie()</code>表示动态写入内容,可以识别标签语法;如果通过元素绑定事件方式执行写入,会造成页面重写。</p>
<h3 id="2-语法规范">2. 语法规范</h3>
<ul>
<li>严格区分大小写;</li>
<li>语句可以使用<code>;</code>作为结束的标志,也可以不写</li>
<li>注释:<code>//</code>单行; <code>/* */</code>多行</li>
</ul>
<h2 id="三变量">三、变量</h2>
<h3 id="1-变量">1. 变量</h3>
<p>变量用于存储在程序运行过程中可以随时修改的数据</p>
<p>关键字:<code>var</code></p>
<pre><code class="language-javascript">// 定义
var a ; // 声明变量
a = 100 ; // 给变量赋值
var b = 200; //声明的同时赋值
var c,d,n; // 同时声明多个变量
c = 10;
d = 20;
var k = 100, m = 1000; //同时声明并赋值多个变量
</code></pre>
<blockquote>
<p>注意:</p>
<p>变零使用var关键字声明,但未赋值,默认为<code>undefined</code></p>
<p>省略var关键字给变量赋值,变量可以正常使用,但是影响变量的作用域</p>
<p>变量如果未声明、未赋值,直接使用则会报错</p>
</blockquote>
<h3 id="2常量">2.常量</h3>
<p>常量用于存储一经定义就不能修改的数据。</p>
<p>使用const关键字创建常量,必须声明并赋值。</p>
<p>命名规范:</p>
<ul>
<li>变量名、常量名、函数名、方法名自定义,可以由数字、字母、下划线和<code>$</code>组成,禁止以数字开头,禁止与关键字冲突。尽量见名知意,多个单词组成采用小驼峰命名。</li>
<li>尽量使用小写字母表示,特殊情况区分。常量名一般采用全大写字母表示,与变量区分</li>
</ul>
<h3 id="3-练习">3. 练习</h3>
<p>定义变量,常量,计算圆的周长和面积,并保留n位小数</p>
<blockquote>
<p>提示:<code>toFixed(n)</code>保留n位小数</p>
</blockquote>
<pre><code class="language-javascript">var r = 6;
const PI = 3.14;
var l = 2 * PI * r;
var s = PI * (r ** 2);
console.log("该圆周长为:",l.toFixed(2));
console.log("该圆面积为:",s.toFixed(2));
</code></pre>
<h2 id="四数据类型">四、数据类型</h2>
<p>检测数据类型:<code>typeof num /typeof (num)</code></p>
<h3 id="1值类型">1.值类型</h3>
<p>基础数据类型</p>
<h4 id="11-数值型">1.1 数值型</h4>
<p>(1) <code>number</code></p>
<ul>
<li>
<p>整数</p>
<pre><code class="language-javascript">var a = 100;
// 八进制以0位前缀
var b = 015;
// 十六进制以0x为前缀
var c = 0x15;
</code></pre>
<p>不管使用哪一种进制表示,最终在控制台都以十进制输出</p>
</li>
<li>
<p>小数</p>
<pre><code class="language-javascript">var n = 1.56
// 科学计数法:var k = 1.56e3; 1.56*(10 ** 3)
//e表示以10位底,3表示次方数
1.56 * 10 (3)
</code></pre>
</li>
</ul>
<p>(2)<code>string</code></p>
<p>字符串,使用引号表示</p>
<pre><code class="language-javascript">var s1 = 'chancey';
console.log(typeof s1 ,s1)
</code></pre>
<p>(3) <code>boolean</code></p>
<p>只有<code>true / false</code>两个值,可以转换成数值类型,true为1,false为0</p>
<p>(4) <code>ubdefined</code></p>
<p>两种方式</p>
<p>特殊值,声明未赋值的时候,默认值为<code>undefined</code></p>
<pre><code class="language-javascript">var age;
console.log(s)
console.log(typeof age);
</code></pre>
<p>(5) <code>null</code></p>
<pre><code class="language-javascript">var num = null;
console.log(num,typeof num)
</code></pre>
<p>一般用于解除对象的引用。</p>
<h3 id="2-对象">2. 对象</h3>
<p>引用数据类型</p>
<p>对象是由属性和方法组成,使用<code>.语法</code>访问</p>
<p>函数、数组、字符串、日期、自定义对象</p>
<h2 id="五数据类型转换">五、数据类型转换</h2>
<h3 id="1自动类型转换">1.自动类型转换</h3>
<h4 id="11-数学运算符">1.1 数学运算符</h4>
<p><code>+ - * / %</code></p>
<pre><code class="language-javascript">var r1 = 100 + 10;
var r2 = 5 + "20";
var r3 = 50 + 2 + "1";
console.log(r1,r2,r3);

var r4 = "1" + 2 + 50;
console.log(r4);

var r5 = "100" + true;
var r6 = "100" + undefined;
var r7 = "100" + null;
console.log(r5,r6,r7)

var res2 = "hello" - 10;
console.log(res2);
var res3 = "100" - true;
var res4 = "100a" - true;
console.log(res3,res4)
var res5 = "100" + true;
var res6 = "100" - undefined;
var res7 = "100" - null;
console.log(res5,res6,res7)
</code></pre>
<h4 id="12-运算规则">1.2 运算规则</h4>
<p>字符串与其他类型做+运算,将非字符串自动转为字符串做拼接,结果仍为字符串</p>
<p>其他情况下一律将操作数转number参与数学运算。如果转换number失败则变成NAN参与数学计算,结果一律为NaN</p>
<h3 id="2强制类型转换">2.强制类型转换</h3>
<p>(1) 转字符串 <code>.toString()</code>将变量装换为字符串并返回</p>
<pre><code class="language-javascript">//强制类型转换
var n1 = 100;
var n2 = true;
var n3 = null;
//将其转换为字符串
var s1 = n1.toString();
var s2 = n2.toString();
// var s1 = n3.toString(); //对象不能直接转换
console.log(n1,typeof n1,s1,typeof s1)
console.log(n2,typeof n2,s2,typeof s2)
// console.log(n3.s3,typeof s3)
var n4 = undefined;
console.log(n4,typeof n4)
var s4 = undefined.toString()
</code></pre>
<blockquote>
<p>null为对象类型无法转换为字符串</p>
<p>undefined特殊,同样不能转换</p>
</blockquote>
<p>(2) 转换number</p>
<ul>
<li>整体转number <code>Number(n)</code></li>
</ul>
<pre><code class="language-javascript">console.log(Number("100"));
console.log(Number("100a"),Number("hello"));
console.log(Number(undefined),Number(null));
</code></pre>
<ul>
<li>
<p>解析整数或解析number部分</p>
<p><code>parseInt(n)</code>解析整数部分</p>
<p><code>parseFloat(n)</code>解析整数加小数</p>
<p>解析过程:现将数据转换为字符串;从前向后逐位对每一个字符转number,转换失败则停止向后解析,直接返回结果</p>
<pre><code class="language-javascript">console.log(parseInt("100"));
console.log(parseInt(35.5)); //取整数
console.log(parseInt("35.5a"));
console.log(parseInt("a35.5"));
console.log(parseInt(true));
console.log(parseFloat(35.5))
</code></pre>
</li>
</ul>
<p>(3) 转布尔</p>
<p><code>Boolean(n)</code></p>
<pre><code class="language-javascript">console.log(Boolean(0))
console.log(Boolean(1))
console.log(Boolean(100))
console.log(Boolean('100'))
console.log(Boolean(0.0))
console.log(Boolean(""))
console.log(Boolean(undefined))
console.log(Boolean(null))
console.log(Boolean(NaN))
</code></pre>
<blockquote>
<p>除0或者空字符串外,其余都为真,即<code>true</code>(0包括<code>undefined / null / NaN</code>非空字符串也为真)</p>
</blockquote>
<h2 id="六运算符">六、运算符</h2>
<h3 id="1赋值运算符">1.赋值运算符</h3>
<p><code>=</code></p>
<h3 id="2-算数运算符">2. 算数运算符</h3>
<p><code>+ - * / %</code></p>
<h3 id="3-复合运算符">3. 复合运算符</h3>
<p><code>+= -= *= /= %=</code></p>
<pre><code class="language-javascript">
</code></pre>
<h3 id="4-自增自减">4. 自增自减</h3>
<p><code>++ --</code></p>
<p>作用:在变量自身值的基础上+1/-1</p>
<ul>
<li>单独与变量结合,做前缀或后缀都可以,包含自动类型转换,在自身number值的基础上+1</li>
<li>与其他运算符结合使用,做前缀表示先自增,做后缀表示后自增</li>
</ul>
<pre><code class="language-javascript">// 自增自减运算符
var a = 10;
a ++; // 等同于 a += 1;
++ a;
console.log(a);
var b = "10";
b += 1;
console.log(b)
// ++包含自动类型转换,在自身number值的基础上+1
b ++;
console.log(b)

var c = 10;
var r1 = c++; // 先将c值赋给r1,则r1为10,c还要自增,则c为11
console.log(c,r1)
var r2 = ++c; // c先自增,则c为12,然后将12赋值给r2,则r为12
console.log(c,r2)

var n = 5;
var r = n++ + ++n + n++ + ++n + n
console.log(r,n)
</code></pre>
<p><img src="http://wx2.sinaimg.cn/mw690/007WoGSoly1g5z9io3wpyj30oz0drwfm.jpg" alt="" loading="lazy"></p>
<h3 id="5-比较运算符">5. 比较运算符</h3>
<p><code>&gt; &lt; &lt;= &gt;= == === != !==</code></p>
<p>(1) 比较运算符的结果永远是布尔值</p>
<p>(2) 运算规则:</p>
<pre><code class="language-javascript">console.log("10" &gt; "2"); // 同为字符串的时候,逐位比较unicode编码值
console.log("15" &gt; "151");
console.log("hello" &gt; "apple");
console.log(r4 = "10" &gt; 2);
console.log(100 &gt; true); // 100&gt;1
console.log(100 &gt; undefined); //100&gt;NaN
console.log(100 &gt; null);
console.log('hello' &gt; 100);
console.log('hello' &gt; undefined); //NaN&gt;NaN
console.log(true &gt; false); //1&gt;0
</code></pre>
<blockquote>
<p>同为字符串进行比较,不会转换数据类型,逐位比较每位字符的Unicode码值;</p>
<p>其他情况下,一律将操作数转换为number进行比较。如果转换失败则变成NaN参与比较运算,结果一律为false</p>
</blockquote>
<p>(3) 相等和全等</p>
<p>相等:包含自动转换类型,只要值相等就成立</p>
<p>全等:不会转换类型,要求数据类型一致并且值相等才会成立</p>
<p>不等:不考虑数据类型,只要值不相等就成立</p>
<p>不全等:数据类型不同或值不等,都不成立</p>
<pre><code class="language-java">console.log('10' == 10 , '10' === 10) //true false 松散比较和严格比较
console.log('10' != 10 , '10' !== 10) //false true
</code></pre>
<h3 id="6-逻辑运算符">6. 逻辑运算符</h3>
<p>逻辑运算的结果为布尔值</p>
<p>(1) 与<code>&amp;&amp;</code></p>
<p>全1则1</p>
<p>(2) 或<code>||</code></p>
<p>有1则1</p>
<p>(3) 非<code>!</code></p>
<p>对已有结果取反,切换布尔值。除“零”值以外,其他值都为真</p>
<pre><code class="language-javascript">console.log(10&gt;5 &amp;&amp; 2&gt;3) // false
console.log(10&gt;5 &amp;&amp; 2&lt;3) // true
console.log(10&gt;5 || 2&gt;3) // true
console.log(10&gt;5 || 2&lt;3) // true
console.log(! 2&gt;3) // false
console.log(! 2&lt;3) // true
console.log(!2) // false
console.log(!0) // true

console.log(!(3&gt;5)) //true


</code></pre>
<p>比较运算优先级:非<code>!</code>&gt;与<code>&amp;&amp;</code>&gt;或<code>||</code></p>
<p>练习:</p>
<p>定义变量表示年份,判断是否为闰年</p>
<pre><code class="language-javascript">var year = 2019;
r = year%400==0 || year%4==0 &amp;&amp; year%100!=0;
console.log(r)
</code></pre>
<h3 id="7-位运算符">7. 位运算符</h3>
<p>位运算符是指直接对数据的二进制操作</p>
<p>(1)位与<code>&amp;</code></p>
<p>全1则1</p>
<pre><code class="language-javascript">console.log(3 &amp; 5)
</code></pre>
<p><img src="http://wx4.sinaimg.cn/mw690/007WoGSoly1g5zc6d3mgyj309405574b.jpg" alt="" loading="lazy"></p>
<p>(2)位或<code>|</code></p>
<p><img src="http://wx2.sinaimg.cn/mw690/007WoGSoly1g5zca646j8j308004v748.jpg" alt="" loading="lazy"></p>
<p>(3)异或<code>^</code></p>
<p>相同为0,不同为1</p>
<pre><code class="language-javascript">//两个变量交换值
var a = 3,b = 5;
a = a ^ b;
b = a ^ b;
a = a ^ b;
console.log(a,b)
</code></pre>
<h3 id="8三目运算符">8.三目运算符</h3>
<p>语法:<code>表达式1 ? 表达式2 : 表达式3;</code></p>
<p>过程:判断表达式1是否成立,成立则执行或返回表达式2的结果,不成立则返回表达式3的结果</p>
<pre><code class="language-javascript">var money = 1000;
console.log( money &gt;= 1000 ? '存款' : '余额');

var score = 85;
console.log(score &gt;= 90 ? "A" : score &gt;= 80 ? "B" : "C");
</code></pre>
<p>练习:</p>
<p>输入用户的成绩,判断区间范围</p>
<pre><code class="language-javascript">score = prompt("请输入您的成绩")
a = (score &gt;= 80 ? '优秀' : score &gt;= 60 ? '合格' : "不合格")
document.write("您的成绩",a)
</code></pre>
<p>输入用户的身高(m)和体重(kg),计算bmi,(bmi = 体重 / (身高*身高)),保留两位小数,判断身体指数,(bmi &gt;= 23.9 偏胖bmi &gt;=18.5 健康   bmi &lt; 18.5 偏瘦)</p>
<pre><code class="language-javascript">m = prompt("请输入身高(单位:m)")
kg = prompt("请输入体重(单位:kg)")
bmi = (kg / (m * m)).toFixed(1)
a = bmi &gt;= 23.9 ? "偏胖" : bmi &gt;= 18.5 ? "健康" : "偏瘦"
document.write("您的健康指数为:",a)
</code></pre>
<h2 id="七流程控制">七、流程控制</h2>
<h3 id="1-判断">1. 判断</h3>
<p>分支语句</p>
<h4 id="11-if">1.1 if</h4>
<p>语法:</p>
<pre><code class="language-javascript">//单分支
if (判断条件){
    条件成立的执行体
    }else{
      条件不成立的执行体
    }

//多重分支
if (判断条件){
    条件成立的执行体
}else if(){
         前边条件成立的执行体
}else if(){
         前边条件成立的执行体
}else{
    以上条件均不成立的执行体
}
</code></pre>
<blockquote>
<p>如果if()之后没有{},则if只控制if后边的一行代码</p>
</blockquote>
<pre><code class="language-javascript">//单分支
var a = 10;
if(a &gt; 0){
    document.write(a,"&lt;br&gt;")
}

if(a &lt; 0) //不跟{}
console.log("a &lt; 0");
console.log("---------");

//多重分支
var b = 10;
if(b &lt; 2){
    document.write("成立");
}else{
    document.write("不成立");
}

var b = 10;
if(b &gt; 2){
    document.write("成立");
}else if(b &gt; 5){
    document.write("不成立");
}else{
    document.write("哈哈")
}
</code></pre>
<p>练习:</p>
<pre><code class="language-javascript">// 判断成绩
var s = prompt("请输入成绩");
if(s &gt;= 80){
    document.write("成绩优秀");
}else if(s &gt;= 60){
    document.write("成绩合格");
}else{
    document.write("成绩不合格");
}

// 判断当日是今年的第几天
var year = prompt("请输入年份");
var month = prompt("请输入月份");
var day = prompt("请输入日份");
var sum = 0;
var day = Number(day)
// 闰年判断
var isRun = year%4 == 0 &amp;&amp; year%100 != 0 || year%400 ==0
if(month == 1){
    sum += day;
}else if(month == 2){
    sum = 31 + day;
}else if(month == 3){
    sum = 31 + 28 + day;
}else if(month == 4){
    sum = 31 + 28 + 31 + day;
}else if(month == 5){
    sum = 31 + 28 + 31 + 30 + day;
}else if(month == 6){
    sum = 31 + 28 + 31 + 30 + 31 + day;
}else if(month == 7){
    sum = 31 + 28 + 31 + 30 + 31 + 30 + day;
}else if(month == 8){
    sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + day;
}else if(month == 9){
    sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 30 + day;
}else if(month == 10){
    sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 30 + 31 + day;
}else if(month == 11){
    sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 30 + 31 + 30 + day;
}else if(month == 12){
    sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 30 + 31 + 30 + 31 + day;
}
if(isRun &amp;&amp; month &gt; 2){
    sum ++
}
document.write("今天是",year,'年',month,'月',day,'日','&lt;br/&gt;',"今天是今年的第",sum,"天")
</code></pre>
<h4 id="12-switch">1.2 switch</h4>
<p>用于值的全等匹配</p>
<p>语法:</p>
<pre><code class="language-javascript">switch(a){
      //依次列举所有可能的值
    case 值1:
      //匹配全等时执行的代码段
      break; //结束匹配
    case 值2:
      //代码语句
      break
    default:
      //所有case匹配失败以后,执行的默认操作
}
</code></pre>
<pre><code class="language-javascript">var a = 3;
switch(a){
    case 1:
      document.write("a===1");
      break;
    case 2:
      document.write("a===2");
      break;
    case 3:
      document.write("匹配成功");
      break;
    default:
      document.write("匹配失败");
}


</code></pre>
<blockquote>
<p>特殊用法:</p>
<p>省略break,会从当前匹配到case开始向后执行所有的代码语句;</p>
<p>多个case共用代码段</p>
<pre><code class="language-javascript">case 1:
case 2:
        //代码段
        break;
</code></pre>
</blockquote>
<p>使用switch改版日期计算</p>
<pre><code class="language-javascript">var year = prompt("请输入年份");
var month = prompt("请输入月份");
var day = prompt("请输入日份");
var sum = 0;
var day = Number(day)
// 闰年判断
var isRun = year%4 == 0 &amp;&amp; year%100 != 0 || year%400 ==0
switch(month - 1){
    case 11:
      sum += 30;
    case 10:
      sum += 31;
    case 9:
      sum += 30;
    case 8:
      sum += 31;
    case 7:
      sum += 31;
    case 6:
      sum += 30;
    case 5:
      sum += 31;
    case 4:
      sum += 30;
    case 3:
      sum += 31;
    case 2:
      sum += 28;
      if(isRun &amp;&amp; month &gt; 2){
            sum ++
      }
    case 1:
      sum += 31;
}
document.write("今天是",year,'年',month,'月',day,'日','&lt;br/&gt;',"今天是今年的第",sum,"天")

</code></pre>
<h3 id="2-循环">2. 循环</h3>
<h4 id="21-while">2.1 while</h4>
<p>语法:</p>
<pre><code class="language-javascript">var i = 1; //定义循环变量
while(i&lt;101){
    //定义循环条件
    i++//更新循环变量
}
</code></pre>
<p>练习</p>
<pre><code class="language-javascript">//打印1-100之间的整数
var i = 0;
while(i&lt;101){
    document.write(i,'&amp;emsp;');
    i ++;
}

// 求1-100之间整数的和
var a = 0;
var i = 0;
while(i&lt;101){
    // document.write(i,'&amp;emsp;');
    a += i;
    i ++;
}
document.write(a)

// 输出1-100之间所有3的倍数
var i = 0;
while(i&lt;101){
    i ++;
    if(i % 3 == 0){
      document.write(i,"&amp;emsp;")
    }
}


</code></pre>
<h4 id="22-do-while">2.2 do-while</h4>
<p>语法:</p>
<pre><code class="language-javascript">do{
    //循环体
    //更新循环变量
}while(循环条件);
</code></pre>
<blockquote>
<p>while循环先判断条件成立才执行循环,do-while循环先循环一次,然后开始判断条件执行</p>
</blockquote>
<pre><code class="language-javascript">// 循环让用户输入,直至输入exit结束循环
do{
    var input = prompt();
}while(input != "exit");
</code></pre>
<h4 id="23-for">2.3 for</h4>
<p>语法:</p>
<pre><code class="language-javascript">for(定义循环变量;循环条件;更新循环变量){
    //循环体
}
</code></pre>
<pre><code class="language-javascript">//打印1-100之间的整数
for(var i = 10 ; i &lt; 101 ; i ++){
    document.write(i,"&amp;emsp;")
}
// 求1-100之间整数的和
var sum = 0;
for(var i = 1 ; i &lt; 101 ; i ++){
    sum += i;
}
document.write(sum)
// 输出1-100之间所有3的倍数
for(var i = 1 ; i &lt; 101 ; i ++){
    if (i % 3 == 0){
      document.write(i,'&amp;emsp;')
    }
}
</code></pre>
<h4 id="24-循环控制">2.4 循环控制</h4>
<p><code>break</code>跳出循环</p>
<p><code>continue</code>结束本次循环,开始下次循环</p>
<pre><code class="language-javascript">// 循环让用户输入,直至输入exit结束循环
while(true){
    input = prompt("");
    if(input == "exit"){
      break;
    }
}
</code></pre>
<h4 id="25-循环嵌套">2.5 循环嵌套</h4>
<pre><code class="language-javascript">// 计算星期几
var year = prompt("请输入年");
var month = prompt("请输入月");
var day = prompt("请输入日");

var sum = 0;

var idRun = year%4 == 0 &amp;&amp; year%100 != 0 || year% 400 == 0;
//整年天数的累加
for(var i = 1990 ; i &lt; year - 1 ; i++){
    sum += 365;
    if(i%4 == 0 &amp;&amp; i%100 != 0 || i%400 == 0){
      sum++;
    }
}
//当前整月天数的累加
for(var j = 1 ; j &lt; month ; j++){
    switch(i){
      case 1:
      case 3:
      case 5:
      case 7:
      case 8:
      case 10:
            sum += 31;
            break;
      case 4:
      case 6:
      case 9:
      case 11:
            sum += 30;
            break;
      case 2:
            sum += 28;
            if(isRun){
                sum ++;
            }
    }
}
//当前月天数的累加
sum += day;
// 计算当前星期几
var week = sum % 7;
var show = "";
switch(week){
    case 0:
      // show = "日";
      week = "日";
      break;
    case 1:
      week = "一";
      break;
    case 2:
      week = "二";
      break;
    case 3:
      week = "三";
      break;            
    case 4:
      week = "四";
      break;            
    case 5:
      week = "五";
      break;            
    case 6:
      week = "六";
      break;
}

      console.log('今年是星期',week)
</code></pre>
<pre><code class="language-javascript">// 九九乘法表,要求在控制台输出
for(var i = 1 ; i &lt; 10 ; i++){
    var show = "";
    for(var j = 1 ; j &lt;= i ; j++){
      show += i + "*" + j + "=" + i*j + '\t';
      // 拼接每行中所有的表达式
    }
    console.log(show)
}
</code></pre>
<h2 id="八函数">八、函数</h2>
<p>保存代码或封装功能</p>
<h3 id="1-定义">1. 定义</h3>
<p>使用<code>function</code>关键字声明函数</p>
<pre><code class="language-javascript">function 函数名(参数列表){
    //函数体
    return 返回值;
}
</code></pre>
<h3 id="2-函数调用">2. 函数调用</h3>
<p><code>函数名(参数)</code></p>
<pre><code class="language-javascript">// 无参数
function f1() {
    console.log("f1 被调用");
}
f1();
// 带参数
function f2(a,b) {
    console.log(a,b,a*b);
    // arguments 只能在函数体中访问,保存实际参数
    console.log(arguments);
}
f2(2,5) // 实参和形参个数一致
f2(2,5,3) // 实参多于形参 只取前边的实参
f2(2) // 实参少于形参 返回NaN

// 允许实参和形参个数不匹配
</code></pre>
<h3 id="3-作用域">3. 作用域</h3>
<p>作用域分为全局作用域函数作用域</p>
<p>(1)全局变量(全局函数):全局作用域下创建的变量或者函数,在任意地方都能访问和使用。所有省略var关键字创建的变量都是全局变量。</p>
<p>(2)局部变量:函数作用域中使用var关键字创建的变量都为局部变量</p>
<pre><code class="language-javascript">var a = 100;
function f1(){
    console.log("函数内部访问",a) // 在函数内部访问外部变量
}
console.log("外部访问",a) // 在函数外部访问外部变量
f1();
function f2(){
    f1();
    var b = 200;
    console.log("f2:",b) //在函数内部访问内部变量
}
f2();
// console.log(b) // 报错,局部变量无法在函数外部访问

// 以上代码可以看出,全局变量可以在函数内部和外部都访问


var age = 30;
function fn(){
    var age = 18;
    username = "张三"; // 无var关键字,则为全局变量
    console.log(age); //就近原则。内部访问就是内部的值
}
fn();
console.log(username); //创建时并没有var关键字,所以可以正常访问

</code></pre>
<h3 id="4-匿名函数">4. 匿名函数</h3>
<p><code>function()()</code>前边的括号是函数自身,后边的实参</p>
<pre><code class="language-javascript">// 匿名函数
(function (a){
    console.log(a)
})(1000)

//定义变量保存匿名函数,变量名即为函数名
var fun = function (){};
fun();
console.log(fun)
</code></pre>
<p>内存回收,用完即销毁</p>
<ul>
<li>匿名函数自执行,否建局部作用域。(函数自身)(实参)</li>
<li>定义变量接收匿名函数,变量名即为函数名</li>
</ul>
<h2 id="九数组">九、数组</h2>
<p>一组数据</p>
<h3 id="1-创建">1. 创建</h3>
<p><code>var a = </code>字面量方式创建</p>
<p><code>var b = new Array(1,2,3)</code>new关键字创建,如果只有一个参数,则代表预分配的长度</p>
<h3 id="2-操作">2. 操作</h3>
<p>数组会自动为每一位元素分配下标,从0开始</p>
<h3 id="3数组属性">3.数组属性</h3>
<p><code>length</code>:数组长度</p>
<h3 id="4数组遍历">4.数组遍历</h3>
<pre><code class="language-javascript">// 遍历数组
var arr5 = ;
for (var i = 0 ; i &lt; arr5.length ; i++){
    console.log(arr5);
}
for (var i = arr5.length -1 ; i &gt;= 0 ; i--){
    console.log(arr5);
}

// for-in,还可以用来遍历对象
for (var i in arr5){
    console.log(i,arr5)
}
</code></pre>
<p>练习:</p>
<pre><code class="language-javascript">// 1.循环接收用户输入,存储到数组中,直至输入"exit"结束循环,控制台输出数组
function addData(){
    var arr = [];
    while (true){
      var input = prompt(" ");
      if (input == "exit"){
            break; // 跳出循环
      }
      arr = input; //添加元素
    }
    bianLi(arr);
}
function bianLi(arr){// 遍历数组
    for (var i in arr){
      document.write(arr,"&lt;br/&gt;")
    }
}

addData() // 调用


// 2.定义包含若干number值的数组,求数组中的最大值
function findMax(){ //假设最大的值为arr,将其赋值给其他变量,然后依次更改最大值
    var arr = ;
    var max = arr;
    for (var i in arr){
      if(arr &gt; max){
            max = arr
      }
    }
    document.write("最大值为:",max)
}

findMax();
</code></pre>
<h3 id="5-数组方法">5. 数组方法</h3>
<h4 id="51-push">5.1 push</h4>
<p><code>push(data);</code></p>
<p>在数组的末尾添加一个或多个元素</p>
<p>返回添加后的数组长度</p>
<pre><code class="language-javascript">var arr = ;
r1 = arr.push(10,20); //一次性在数组末尾添加两个元素
</code></pre>
<h4 id="52-pop">5.2 pop</h4>
<p><code>pop();</code></p>
<p>溢出数组的末尾元素</p>
<p>返回被删除的元素</p>
<pre><code class="language-javascript">var arr = ;
document.write(arr,"&lt;br/&gt;")
arr.pop(); //只删除末尾元素
document.write(arr)
</code></pre>
<h4 id="53-unshift">5.3 unshift</h4>
<p><code>unshift(data);</code></p>
<p>在数组的头部添加一个或多个元素</p>
<pre><code class="language-javascript">var arr = ;
arr.unshift("a","b") // 将ab整体添加到头部,即['a','b',1,2,3]
console.log(arr)
arr.unshift("c")
arr.unshift("d") // 分别添加,每次添加到头部,即['d','c','a','b',1,2,3]
</code></pre>
<h4 id="54-shift">5.4 shift</h4>
<p><code>shift();</code></p>
<p>移除数组的头部元素</p>
<pre><code class="language-javascript">var arr = ;
arr.shift()
console.log(arr)
</code></pre>
<h4 id="55-tostring">5.5 toString</h4>
<p><code>toString();</code></p>
<p>将数组转换为字符串,返回转换后的结果</p>
<h4 id="56-join">5.6 join</h4>
<p><code>join(param);</code></p>
<p>将数组转换为字符串,参数用于指定数组元素之间的连接符,默认使用逗号</p>
<pre><code class="language-javascript">var s1 = arr.toString();
console.log(s1,arr);
var s2 = arr.join("-");
console.log(s2,arr);
var s3 = arr.join("");
console.log(s3,arr)
</code></pre>
<h4 id="57-reverse">5.7 reverse</h4>
<p><code>reverse();</code></p>
<p>翻转数组(倒序重排),对当前数组结构的调整。</p>
<h4 id="58-sort">5.8 sort</h4>
<p><code>sort();</code></p>
<pre><code class="language-javascript">res = arr.sort(); //默认按照Unicode编码升序排列
console.log(res);
</code></pre>
<h4 id="59-foreach">5.9 forEach</h4>
<p><code>forEach(function (){})</code></p>
<p>数组自带的遍历方法</p>
<pre><code class="language-javascript">// 数组自带的遍历的方法
var arr =
arr.forEach(function (elem,index){
    console.log(elem,index);
});
</code></pre>
<h3 id="6-二维数组">6. 二维数组</h3>
<pre><code class="language-javascript">var arr = [,,];
arr //3
</code></pre>
<pre><code class="language-javascript">// 遍历二维数组

</code></pre>
<h2 id="十字符串">十、字符串</h2>
<h3 id="1-创建-1">1. 创建</h3>
<p>创建字符串有两种方法</p>
<p><code>var s = 'hello';</code></p>
<p><code>var s = new String("world");</code></p>
<pre><code class="language-javascript">// 遍历字符串
for (var i in s1){
    console.log(s1);
}
for (var i = 0 ; i &lt; s1.length ; i++){
    console.log(s1);
}
</code></pre>
<h3 id="2-特点">2. 特点</h3>
<p>字符串采用数组结构存储,自动为每一位字符分配下标,可以使用下标访问每位存储</p>
<h3 id="3-属性">3. 属性</h3>
<p><code>length:字符串长度</code></p>
<h3 id="4方法">4.方法</h3>
<h4 id="1-大小写">(1) 大小写</h4>
<p><code>toUpperCase()</code>转换大写</p>
<p><code>toLowerCase()</code>转换小写</p>
<pre><code class="language-javascript">var s3 = "Apple";
var r1 = s3.toUpperCase();
var r2 = s3.toLowerCase();
console.log(s3)
console.log(r1)
console.log(r2)
</code></pre>
<h4 id="2-下标">(2) 下标</h4>
<p>根据下标获取指定的字符或字符编码</p>
<p><code>charAt(index)</code></p>
<p><code>charCodeAt(index)</code></p>
<pre><code class="language-javascript">var r1 = s1.charAt(1); // 下标为1的字符
console.log(r1)
var r2 = s1.charCodeAt(1); // 下标为1的字符编码
console.log(r2)
</code></pre>
<blockquote>
<p>参数可以省略,默认为0</p>
</blockquote>
<h4 id="3-查下标">(3) 查下标</h4>
<p><code>indexOf("",fromIndex)</code></p>
<p><code>lastIndexOf("",fromIndex)</code></p>
<p>参数:</p>
<p>指定查找字符串;</p>
<p>fromIndex设置起始下标;</p>
<pre><code class="language-javascript">str = 'hello world';
var r3 = s1.indexOf('o',2);
var r4 = s1.lastIndexOf('l',3);
console.log(r3)
console.log(r4)
</code></pre>
<blockquote>
<p>查找方式:</p>
<p>indexOf从指定的下标开始向后查找字符,找到即返回</p>
<p>lastIndexOf从指定下标开始向前查找字符,找到即返回</p>
<p>如果为-1则表示查找失败</p>
</blockquote>
<h4 id="4-截取">(4) 截取</h4>
<p><code>substring(startIndex,endIndex)</code></p>
<p>截取start~end-1范围内的字符串,结束下标可以省略。</p>
<pre><code class="language-javascript">// 截取字符串
var r5 = s1.substring(2,4);
var r6 = s1.substring(2);
console.log(r5);
console.log(r6);
</code></pre>
<h4 id="5-分割">(5) 分割</h4>
<p><code>split(param)</code></p>
<p>参数为指定分隔符,返回数组,存放分割结果。</p>
<pre><code class="language-javascript">var s1 = "2020-10-10";
var r1 = s1.split("-");
console.log(r1);
var r2 = s1.split('/');
console.log(r2)
</code></pre>
<blockquote>
<p>注意:</p>
<p>参数必须为字符串中存在的字符,否则分割无效。</p>
</blockquote>
<pre><code class="language-javascript">// "101=5&amp;201=10&amp;301=8"
s2 = "101=5&amp;201=10&amp;301=8";
var r3 = s2.split("&amp;");
for (i in r3){
    var r4 = r3.split("=");
    console.log(r4,r4);
}
</code></pre>
<h4 id="6-模式匹配">(6) 模式匹配</h4>
<p>正则表达式(RegExp)</p>
<p>指定的字符串格式</p>
<p>语法:<code>var reg1 = /字符格式/修饰符;</code></p>
<p>修饰符:<code>i(ignorecase)</code>忽略大小写,<code>g(global)</code>全局匹配。</p>
<p>例如:</p>
<pre><code class="language-javascript">// 固定查找内容
var reg1 = /知乎/g;
// 固定查找格式
var reg2 = /\d{6,11}/g;
</code></pre>
<p><code>match()</code>查找</p>
<p><code>replace()</code>替换</p>
<pre><code class="language-javascript">var s = "上知乎,搜知乎,问知乎,答知乎";
console.log(s.match("知乎"));
var reg = /知乎/;

console.log(s.match(/知乎/)); // 懒惰匹配
console.log(s.match(/知乎/g)); // 贪婪匹配

// 查找并替换
r1 = s.replace("知乎","新浪");
r2 = s.replace(/知乎/g,"新浪");
console.log(r1,"",r2);
</code></pre>
<h4 id="练习">练习</h4>
<p>指定邮箱字符串,提取用户名和服务商</p>
<pre><code class="language-javascript">function mail(){
    var email = prompt("请输入邮箱");
    var number = email.indexOf("@");
    var username = email.substring(0,number);
    var server = email.substring(number + 1);
    document.write("用户名:",username,"&lt;br/&gt;服务商:",server);
}
</code></pre>
<p>从身份证号提取年月日</p>
<pre><code class="language-javascript">function id(){
    var credId = prompt("请输入身份证号码");
    var year = credId.substring(6,10);
    var month = credId.substring(10,12);
    var day = credId.substring(12,14);
    document.write(year,month,day);
}
</code></pre>
<h2 id="十一其他对象">十一、其他对象</h2>
<h3 id="1regexp">1.RegExp</h3>
<p>创建:</p>
<p>属性:</p>
<p><code>lastIndex</code>表示下一次匹配的起始下标</p>
<p>方法:</p>
<p><code>test(str)</code>验证字符串中是否存在满足正则表达式格式的内容,返回布尔值</p>
<p>全局匹配光标位置不同</p>
<pre><code class="language-javascript">// 创建正则表达式
var reg1 = /\d{6}/; // 匹配6位数字
var reg2 = /\d{6}/g; // 全局

var s = "a123456789";

var r1 = reg1.test(s);
var r2 = reg1.test(s);
var r3 = reg1.test(s);
// console.log(r1,r2,r3);

console.log(reg2.lastIndex); // 查看起始索引,即开始匹配的位置
var r4 = reg2.test(s);
console.log(reg2.lastIndex);
var r5 = reg2.test(s);
console.log(reg2.lastIndex);
var r6 = reg2.test(s);
console.log(r4,r5,r6);


console.log(reg2.lastIndex); // 查看起始索引,即开始匹配的位置
var r4 = reg2.test(s);
reg2.lastIndex = 0; //手动指定索引位置
console.log(reg2.lastIndex);
var r5 = reg2.test(s);
reg2.lastIndex = 0;
console.log(reg2.lastIndex);
var r6 = reg2.test(s);
console.log(r4,r5,r6);
</code></pre>
<h3 id="2-math">2. Math</h3>
<pre><code class="language-javascript">// Math对象的属性:数学常量
console.log(Math.PI,Math.E); //圆周率,对数
// 方法
console.log(Math.random()); //生成0-1之间的随机小时
console.log(Math.ceil(4.1)); //向上取整:舍弃小数位,整数+1
console.log(Math.floor(4.99)); //向下取整:舍弃小数位,保留整数
console.log(Math.round(4.5)) //四舍五入
</code></pre>
<h3 id="3date">3.Date</h3>
<pre><code class="language-javascript">// 提取时间分量
var year = date.getFullYear(); // 获取年
var month = date.getMonth() + 1; // 返回0-11对应12个月,所以这里必须加1
var day = date.getDate();// 获取日期
var week = date.getDay(); // 获取星期
var hour = date.getHours(); // 获取小时
var mintue = date.getMinutes(); // 获取分
var second = date.getSeconds(); //获取秒
console.log(year,month,day,'星期',week,hour,":",mintue,":",second);

// 转换日期对象的显示格式
var timeStr = date.toLocaleString(); // 转字符串
console.log(timeStr);


// 获取年月日
var str1 = date.toLocaleDateString();
var str2 = date.toLocaleTimeString();
console.log(str1,str2)
</code></pre>
<h2 id="十二例">十二、例</h2>
<p>循环接收用户输入,保存到数组中,exit结束,使用数组相关方法实现</p>
<pre><code class="language-javascript">function addData(){
    var arr = [];
    while (true){
      var input = prompt("请输入");
      if (input == "exit"){
            break;
      }
      arr.push(input);
    }
    console.log(arr);
}
</code></pre>
<p>模拟验证码</p>
<pre><code class="language-javascript">// 模拟验证码
function createCode(length){
    // 模拟数据源
    var arr = ["a","c","h","q",4,5,"n",8,"c",9,2,"e",6,0,"y"]
    var code = "";
    for (var i = 1 ; i &lt;= length ; i++){
      // 创建随机下标
      var index = parseInt( (Math.random()) * arr.length );
      // 拼接
      code += arr
    }
    return code;
}
function validate(){
    // 1.生成验证码
    var code = createCode(4);
    // 2.提示输入
    var input = prompt("验证码为"+code);
    // 3.验证
    if(code.toLowerCase() == input.toLowerCase()){
      alert("正确");
    }else{
      alert("错误");
    }
}
</code></pre><br><br>
来源:https://www.cnblogs.com/chancey/p/11381867.html
頁: [1]
查看完整版本: JavaScript