diff --git a/README.md b/README.md index fa6af2a..fe08612 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,24 @@ -# 朱邦邦的JavaScript学习笔记 -我的学习笔记 +# 安邦的JavaScript学习笔记 + +这是当初学习JS时候的笔记, + +因小伙伴反应Github不适合阅读, + +我在我的个人网站(阿西河前端教程)上也有整理一份,详情参见; + +[朱安邦的JavaScript学习笔记](https://www.axihe.com/anbang/js/edu/home.html) (我的个人网站) + +后期主要更新在我的个人网站上,感觉我整理后的还是很适合学习和阅读的,服务器放在国内,访问速度也超级快; + +然后每年的年底统一把新增的内容更新到当前的Github仓库; + +欢迎大家关注我的小网站: https://www.axihe.com/ + +同时我也在Bilibili上开频道做UP主;欢迎在B站关注我: https://space.bilibili.com/59312814 > 基于ES5,包含ES6的,笔记最近正在重新整理,有些链接可能失效;会尽快整理好; -1. [前端开发初识](./前端开发初识/README.MD) +1. [前端开发初识](./前端开发初识/) - [编辑器的选择/开发环境介绍](./前端开发初识/README.MD#one) - [HTML文档和标签介绍](./前端开发初识/README.MD#two) - [JS由哪些部分组成、DOM初识](./前端开发初识/README.MD#three) @@ -17,7 +32,7 @@ - [前端技术方向的选择,编程语言是做什么的?](./前端开发初识/README.MD#eleven) - [JS代码检测的一些小方法](./前端开发初识/README.MD#twelve) -1. [数据类型初识](./数据类型初识/README.MD) +1. [数据类型初识](./数据类型初识/) - [String](./数据类型初识/README.MD#one) - [Number](./数据类型初识/README.MD#two) - [Boolean](./数据类型初识/README.MD#three) @@ -26,6 +41,15 @@ - [null和undefined的区别和联系](./数据类型初识/README.MD#six) - [Symbol](./数据类型初识/README.MD#footer) - [练习题](./数据类型初识/README.MD#footer) + +1. [函数初识](./函数初识/) + - [初识函数](./数据类型初识/README.MD#one) + - [函数的定义](./数据类型初识/README.MD#two) + - [函数的调用](./数据类型初识/README.MD#three) + - [函数的方法](./数据类型初识/README.MD#four) + - [arguments对象](./数据类型初识/README.MD#five) + - [函数的参数](./数据类型初识/README.MD#six) + - [this关键字的指向](./数据类型初识/README.MD#seven) 1. [变量声明和原理](./变量声明和原理/README.MD) - [变量的命名](./变量声明和原理/README.MD#one) @@ -160,4 +184,3 @@ -![](http://i.imgur.com/sUHkgQF.png) diff --git "a/\345\207\275\346\225\260\345\210\235\350\257\206/1.\345\207\275\346\225\260\345\256\232\344\271\211.js" "b/\345\207\275\346\225\260\345\210\235\350\257\206/1.\345\207\275\346\225\260\345\256\232\344\271\211.js" new file mode 100644 index 0000000..c63960c --- /dev/null +++ "b/\345\207\275\346\225\260\345\210\235\350\257\206/1.\345\207\275\346\225\260\345\256\232\344\271\211.js" @@ -0,0 +1,17 @@ +//function语句的定义方法 +function test1(arg1,arg2){ + console.log("function语句的定义方法:",arg1+arg2); +} + +//函数直接量的定义方法 +var test2 = function(arg1,arg2){ + console.log("函数直接量的定义方法:",arg1+arg2); +}; +var utility={ + init:function () { + console.log("执行") + } +}; + +//构造函数的定义方法 +var test3 = new Function("arg1","arg2","console.log('构造函数的定义方法:',arg1+arg2)"); \ No newline at end of file diff --git "a/\345\207\275\346\225\260\345\210\235\350\257\206/2.toString.js" "b/\345\207\275\346\225\260\345\210\235\350\257\206/2.toString.js" new file mode 100644 index 0000000..6371573 --- /dev/null +++ "b/\345\207\275\346\225\260\345\210\235\350\257\206/2.toString.js" @@ -0,0 +1,5 @@ +console.log(test1.toString()); + +function test1(){ + console.log("最开始的调用方法"); +} \ No newline at end of file diff --git "a/\345\207\275\346\225\260\345\210\235\350\257\206/README.md" "b/\345\207\275\346\225\260\345\210\235\350\257\206/README.md" new file mode 100644 index 0000000..3496b8b --- /dev/null +++ "b/\345\207\275\346\225\260\345\210\235\350\257\206/README.md" @@ -0,0 +1,374 @@ + + +# 函数的初识 +- 知识点一、[初识函数](#one) +- 知识点二、[函数的定义](#two) +- 知识点三、[函数的调用](#three) +- 知识点四、[函数的方法](#four) +- 知识点五、[arguments对象](#five) +- 知识点六、[函数的参数](#six) +- 知识点七、[this关键字的指向](#seven) +- [面试题](#footer)s + + +# 一、初识函数 + +### 函数的意义:**高内聚,低耦合,复用与多态**; + +可以通过函数封装任意多条语句,而且可以在任何地方,任何时候进行调用,使用非常灵活; + +```$xslt +// 基本的语法 +function functionName(argument1,argument2){ + /*一堆的代码*/ +} +//下面是函数的一个实例, +function diff(a,b){ + console.log(a-b); +} +diff(10,5);//输出5 +diff(20,2);//输出18 +``` + +**函数可以通过它的函数名来调用,后面加(),就可以执行了**; + +上面的diff分别输出的是5和18;a和b是函数的两个参数,最终的结果是打印在控制台的; + +### return + +函数还有一个属性,就是可以 return; + +**知识点1:函数的返回值只能通过return来返回,除了return以外,没有任何声明可以表示返回值** + +ECMA中函数在定义的时候,不要求函数是否返回一个值,但是每个函数都有return的权利; + +任何函数在任何时候都可以通过return语句返回的值来实现把值返回给外部变量(return的位置是任意的); + +```$xslt +function diff(a,b){ + return a-b; +} +var diffNumber=diff(10,5); +console.log(diffNumber); +//diffNumber用来接收函数的返回值,如果return了一个值,但是外部没有变量去接收它,就失去了return的意义了; +``` + +知识点2:**return的特性**:无论return在哪里,只要有执行了return同一条的代码后,函数立即停止,并且立即退出,因此位于return语句之后的任何代码都永远不会执行; +```$xslt +function diff(a,b){ + return a-b; + console.log("测试的代码");//这条语句,永远不会执行; +} +var diffNumber=diff(10,5); +console.log(diffNumber); +``` + + +**知识点3**:一个函数可以多条return; + +写一个函数,计算两个数之间的相差多少; + +```$xslt +function diff(a,b){ + if(a>b){ + return a-b; + }else{ + return b-a; + } +} +var diffNumber1=diff(10,5); +var diffNumber2=diff(5,10); +console.log(diffNumber1);//5 +console.log(diffNumber2);//5 +``` +这个函数diff用来计算两个数之间才差值;如果a比b小,则用b-a;否则a-b;函数中用if分为两个分支,分别具有自己的return语句来执行正确的计算逻辑; + +**知识点4**:return语句可以不带任何返回值,这种情况下,函数返回值是undefined;这种写法,一般用在需要提前停止函数又不需要返回值的情况; + +```$xslt +function testReturn (arg){ + console.log("arg的值是:"+arg); + //如果传的值是空字符串,参数不对, 没必要处理了,直接return停止函数了,可以优化性能;; + if(arg===""){return} + console.log("一些处理参数的代码") +} +testReturn(""); +``` + +**return的总结** + +- 1、任何一个函数都有return关键字,用来导出函数内部的值;(闭包的思路); +- 2、return是非必须的,可以写也可以不写;如果不写,或者return后面没有值,函数的返回结果都是undefined; +- 3、无论return写在哪里,只要函数执行到了return这条代码了,执行完以后,立即停止执行并且跳出函数;会导致return下面的代码将不会执行; +- 4、推荐的做法是要么让函数始终都返回一个值,要么永远不要返回值,;否则函数有时候有返回值,有时候没有返回值,调试起来不方便; + + +**[↑ 返回目录](#zero)** + + +# 二、函数的定义 + +- function语句的定义方法 +- 函数直接量的定义方法(需要考虑变量的预解释) +- 构造函数的定义方法 + +``` +//function语句的定义方法 +function test1(arg1,arg2){ + console.log("function语句的定义方法:",arg1+arg2); +} + +//函数直接量的定义方法 +var test2 = function(arg1,arg2){ + console.log("函数直接量的定义方法:",arg1+arg2); +}; +var utility={ + init:function () { + console.log("执行") + } +}; + +//构造函数的定义方法 +var test3 = new Function("arg1","arg2","console.log('构造函数的定义方法:',arg1+arg2)"); + +``` + +前两种定义方式,比较常见,最后一种做了解即可 + +**[↑ 返回目录](#zero)** + + +# 三、函数的调用 + +1.直接调用: 函数名(实参列表) + +```$xslt +function test1(arg1,arg2){ + console.log("function语句的定义方法:",arg1+arg2); + return; +} + +//直接调用 +test1(1,2);//function语句的定义方法: 3 +``` + +2.在链接中调用 + +```$xslt + + + + +``` + +3.在事件中调用 + +```$xslt + + + + +``` + +4.递归调用 + +**在函数内部调用函数自身** + +```$xslt + + +``` + +函数的调用还是非常灵活的; + +**[↑ 返回目录](#zero)** + +# 四、函数的方法 + +- call:将函数作为对象的方法来调用,将参数传递给该方法,在后面this关键字时候详细总结 +- apply:将函数作为对象的方法来调用,将参数以数组的形式传递给该方法,在后面this关键字时候详细总结 +- toString:返回函数的字符串表示 + +``` +console.log(test1.toString()); + +function test1(){ + console.log("最开始的调用方法"); +} +``` + +**[↑ 返回目录](#zero)** + + +# 五、arguments对象 + +### 功能:存放实参的参数列表 +``` +test1(1,2);//[1,2] +test1(1,2,3,4,5);//[1, 2, 3, 4, 5] +function test1(){ + console.log(arguments); +} + +``` +argutments在普通模式里,可以在函数内部修改函数的值,但是不建议那么做;这点在严格模式下也有限制 + +- 在严格模式,函数内部不能修改argument的值,即使修改了,操作也是无效的; +- 其次重写arguments值会导致语法错误,代码不执行; + +### 特性: +- 仅能在函数体内使用 + +``` +test1(1,2);//[1,2] +function test1(){ + console.log(arguments); +} +console.log(arguments);//Uncaught ReferenceError: arguments is not defined + +``` +- 带有下标属性,但是并非数组 + +``` +test1(1,2);//1 2 undefined +function test1(){ + console.log(arguments[0],arguments[1],arguments[2]); +} + +``` +- 函数声明时自动初始化 + +- 属性 + - 1.length 获取函数实参的长度 + + ```$xslt + test1(1,2,3,4,5);// 输出5 + function test1(){ + console.log(arguments.length); + } + ``` + - 2.callee 返回当前正在指向的函数 + + ```$xslt + test1(1,2,3,4,5);// 输出函数本身 + function test1(){ + console.log(arguments.callee); + } + ``` + + - 3.caller 返回调用当前正在执行函数的函数名;在chrome里是没有的;尽量不要用arguments的这个属性; + - 在chrome里的callee是arguments.callee.caller + - 对于函数来说,caller 属性只有在函数执行时才有定义。 如果函数是由 Javascript 程序的顶层调用的,那么 caller 包含的就是 null 。 + + ``` + function callerDemo() { + if (arguments.callee.caller) { + var a = callerDemo.caller.toString(); + console.log(a); + } else { + console.log("this is a top function"); + } + } + function handleCaller() { + callerDemo(); + } + handleCaller(); + function calleeDemo() { + console.log(arguments.callee); + } + calleeDemo(); + ``` + +**函数的参数是函数的灵魂**;ECMA中的函数不在乎传来多少个参数,也不在乎你传进来的是什么类型的,即使你定义的函数值接受两个参数,在调用的时候未必严格的传进两个实参,你传一个,三个,不传都是没有问题的、`这就是函数的多态`; + +原理是因为ECMA是把函数用在内部用一个”数组”来表示的,函数接受到的始终都是这个数组,并不关心这个”数组”是否包含参数,已经包含的都是什么参数,可以通过`arguments[index]`这种的方式来访问,也可以通过`arguments.length`的值来确定传进来了多个参数; + +```$xslt +function testArgument(){ + console.log("hello argument[0]:"+arguments[0]+" and argument[1]:"+arguments[1]); +} +testArgument("1","2");//hello argument[0]:1 and argument[1]:2 +testArgument("1");//hello argument[0]:1 and argument[1]:undefined +testArgument();//hello argument[0]:undefined and argument[1]:undefined +``` + +函数的一个特点,形参只是提供了操作的便利,但并不是必须的;函数的定义和调用与参数是没有关系的,只有在函数内部引用了形参才与实参个数和值有关系; + +如果函数只是定义了,但是没有执行,那就是脱裤子放屁了;因为对程序不会有任何意义; + +```$xslt +function sum(a,b){ + if(arguments.length===2){ + console.log("第1个参数和第二个参数的和是:"+a+b); + }else if(arguments.length===1){ + console.log("block,只传了一个参数 "+a+",让我如何相加") + }else{ + console.log("我拒绝运算!") + } +} +sum(10,8);//第1个参数和第二个参数的和是:108 +sum(10);//block,只传了一个参数 10,让我如何相加 +sum();//我拒绝运算! +``` + +上面就牵扯到了函数的多态,根据不同的参数来做不同的事情; + + + +**[↑ 返回目录](#zero)** + + +# 六、函数的参数 + +- 参数类型; + 1. 形参,定义函数时使用的参数,接收调用该函数时传递的参数 + 2. 实参,调用函数时传递给函数的实际参数; +- 特性; + 1. 参数个数没有限制;(实参<形参,多余形参==undefined;实参>形参,多余实参被忽略;) + 2. 参数的数据类型没有限制,通过arguments对象访问参数数组; + 3. 参数始终按值传递 + - a) 基本类型-传值; + - b) 引用类型-地址; + + +**[↑ 返回目录](#zero)** + + + +### 七、this关键字的指向 + +- this,指向当前操作对象; +- callee,指向参数集合所属函数 +- prototype,指向函数附带的原型对象; +- constructor,指向创建该对象的构造函数; + +### 面试题 \ No newline at end of file diff --git "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/1.\345\274\200\345\217\221\347\216\257\345\242\203\344\273\213\347\273\215.html" "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/1.\345\274\200\345\217\221\347\216\257\345\242\203\344\273\213\347\273\215.html" new file mode 100644 index 0000000..962fd77 --- /dev/null +++ "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/1.\345\274\200\345\217\221\347\216\257\345\242\203\344\273\213\347\273\215.html" @@ -0,0 +1,16 @@ + + + + + Title + + +
+

编辑器:webstorm/vscode

+

浏览器:chrome

+
+ + + \ No newline at end of file diff --git "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/10.\346\225\260\346\215\256\347\261\273\345\236\213.js" "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/10.\346\225\260\346\215\256\347\261\273\345\236\213.js" new file mode 100644 index 0000000..c535bad --- /dev/null +++ "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/10.\346\225\260\346\215\256\347\261\273\345\236\213.js" @@ -0,0 +1,8 @@ +console.log("22");//string 字符串 +console.log(22);//number 数字类型 +console.log(true);//boolean 布尔 英文考试了 T / F + +console.log(undefined); +console.log(null); +console.log({}); +console.log(function () {}); \ No newline at end of file diff --git "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/11.\346\225\260\346\215\256\347\261\273\345\236\213\345\210\244\346\226\255.js" "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/11.\346\225\260\346\215\256\347\261\273\345\236\213\345\210\244\346\226\255.js" new file mode 100644 index 0000000..89ef7cf --- /dev/null +++ "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/11.\346\225\260\346\215\256\347\261\273\345\236\213\345\210\244\346\226\255.js" @@ -0,0 +1,18 @@ +// 数据类型的判断 +console.log("-------下面是typeof判断"); +console.log(typeof "22");//string 字符串 +console.log(typeof 22);//number 数字类型 +console.log(typeof true);//boolean 布尔 英文考试了 T / F + +console.log(typeof undefined);//undefined +console.log(typeof null);//Object +console.log(typeof {});//Object +console.log(typeof function () {});//function + +// 区别 +console.log("-------下面是区别"); +console.log(typeof "undefined");//string 字符串 +console.log(typeof "true"); //string 字符串 +console.log(typeof "null"); //string 字符串 +console.log(typeof "{}"); //string 字符串 +console.log(typeof "function () {}");//string 字符串 diff --git "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/12.\345\217\230\351\207\217\347\232\204\347\261\273\345\236\213\345\217\257\344\273\245\350\242\253\351\232\217\346\227\266\346\224\271\345\217\230.js" "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/12.\345\217\230\351\207\217\347\232\204\347\261\273\345\236\213\345\217\257\344\273\245\350\242\253\351\232\217\346\227\266\346\224\271\345\217\230.js" new file mode 100644 index 0000000..1b9a393 --- /dev/null +++ "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/12.\345\217\230\351\207\217\347\232\204\347\261\273\345\236\213\345\217\257\344\273\245\350\242\253\351\232\217\346\227\266\346\224\271\345\217\230.js" @@ -0,0 +1,25 @@ +//变量的类型改变 +var china="中国";//string类型里的一个份子, +console.log(china,typeof china); + +china=22; +console.log(china,typeof china); + +china=true; +console.log(china,typeof china); + +china=22; +console.log(china,typeof china); + +console.log(china,typeof china); + +console.log(china,typeof china); + +console.log(china,typeof china); + +console.log(china,typeof china); + + +//不推荐一个变量,用于多种用途; +var total=0; //用来储存金额统计; +var timer=null; //用来储存定时器 \ No newline at end of file diff --git "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/13.console.js" "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/13.console.js" new file mode 100644 index 0000000..67b5df3 --- /dev/null +++ "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/13.console.js" @@ -0,0 +1,24 @@ +console.time("hahaha"); +// alert("22222"); +console.log("info","haha"); +console.log("info2"+"haha2"); + +console.warn("这是一段警告信息"); +console.error("出错啦,你的配置信息有误"); + +// alert(typeof "22"); + +// 断言 + +var a=1; +var b=2; +//= == +//= 这是用来赋值的; +//== 这个是用来判断的 +console.assert(a===1,"这时候条件是a==1,实际a是1"); +console.assert(b===1,"这时候条件是b==1,实际b是2"); + +//性能分析; +console.timeEnd("hahaha");//6.50390625ms + +// console.dir(window); \ No newline at end of file diff --git "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/HTML\346\240\207\347\255\276\344\273\213\347\273\215.html" "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/2.HTML\346\240\207\347\255\276\344\273\213\347\273\215.html" similarity index 100% rename from "\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/HTML\346\240\207\347\255\276\344\273\213\347\273\215.html" rename to "\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/2.HTML\346\240\207\347\255\276\344\273\213\347\273\215.html" diff --git "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/HTML\346\240\207\347\255\276\347\232\204\345\205\250\345\261\200\345\261\236\346\200\247.html" "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/3.HTML\346\240\207\347\255\276\347\232\204\345\205\250\345\261\200\345\261\236\346\200\247.html" similarity index 97% rename from "\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/HTML\346\240\207\347\255\276\347\232\204\345\205\250\345\261\200\345\261\236\346\200\247.html" rename to "\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/3.HTML\346\240\207\347\255\276\347\232\204\345\205\250\345\261\200\345\261\236\346\200\247.html" index c3e2250..7872700 100644 --- "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/HTML\346\240\207\347\255\276\347\232\204\345\205\250\345\261\200\345\261\236\346\200\247.html" +++ "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/3.HTML\346\240\207\347\255\276\347\232\204\345\205\250\345\261\200\345\261\236\346\200\247.html" @@ -10,7 +10,7 @@ .div-class{ color: red; } - .div2{ + #div2{ background-color: red; } #div2{ @@ -25,7 +25,7 @@
5
5
-

22222> +

22222

22222

这是DIV1的内容
222
@@ -46,8 +46,6 @@ oDiv2.style.color="red";//通过JS来改变CSS; console.log("ID",oDiv1); - - var oDivClass=document.getElementsByClassName("div-class");//这是一对标签的集合 console.log(oDivClass); console.log(oDivClass[0]); diff --git "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/JS\347\224\261\345\223\252\344\272\233\351\203\250\345\210\206\347\273\204\346\210\220.html" "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/4.JS\347\224\261\345\223\252\344\272\233\351\203\250\345\210\206\347\273\204\346\210\220.html" similarity index 100% rename from "\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/JS\347\224\261\345\223\252\344\272\233\351\203\250\345\210\206\347\273\204\346\210\220.html" rename to "\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/4.JS\347\224\261\345\223\252\344\272\233\351\203\250\345\210\206\347\273\204\346\210\220.html" diff --git "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/HTML\344\270\255\346\200\216\344\271\210\345\206\231JS.html" "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/5.HTML\344\270\255\346\200\216\344\271\210\345\206\231JS.html" similarity index 100% rename from "\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/HTML\344\270\255\346\200\216\344\271\210\345\206\231JS.html" rename to "\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/5.HTML\344\270\255\346\200\216\344\271\210\345\206\231JS.html" diff --git "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/HTML\344\270\255\346\200\216\344\271\210\345\206\231CSS.html" "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/6.HTML\344\270\255\346\200\216\344\271\210\345\206\231CSS.html" similarity index 98% rename from "\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/HTML\344\270\255\346\200\216\344\271\210\345\206\231CSS.html" rename to "\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/6.HTML\344\270\255\346\200\216\344\271\210\345\206\231CSS.html" index 28a1033..d1a4b9e 100644 --- "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/HTML\344\270\255\346\200\216\344\271\210\345\206\231CSS.html" +++ "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/6.HTML\344\270\255\346\200\216\344\271\210\345\206\231CSS.html" @@ -29,7 +29,7 @@ body .test-demo{ color: orange; } - \ + diff --git "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/HTML\344\270\255\346\200\216\344\271\210\345\206\231CSS2.html" "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/6.HTML\344\270\255\346\200\216\344\271\210\345\206\231CSS2.html" similarity index 100% rename from "\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/HTML\344\270\255\346\200\216\344\271\210\345\206\231CSS2.html" rename to "\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/6.HTML\344\270\255\346\200\216\344\271\210\345\206\231CSS2.html" diff --git "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/noscript\346\240\207\347\255\276\345\274\225\347\224\263\347\232\2042\347\247\215\347\274\226\347\250\213\346\200\235\346\203\263.html" "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/7.noscript\346\240\207\347\255\276\345\274\225\347\224\263\347\232\2042\347\247\215\347\274\226\347\250\213\346\200\235\346\203\263.html" similarity index 100% rename from "\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/noscript\346\240\207\347\255\276\345\274\225\347\224\263\347\232\2042\347\247\215\347\274\226\347\250\213\346\200\235\346\203\263.html" rename to "\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/7.noscript\346\240\207\347\255\276\345\274\225\347\224\263\347\232\2042\347\247\215\347\274\226\347\250\213\346\200\235\346\203\263.html" diff --git "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/CSS3\344\270\255\344\270\244\347\247\215\346\226\271\346\241\210.html" "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/8.CSS3\344\270\255\344\270\244\347\247\215\346\226\271\346\241\210.html" similarity index 100% rename from "\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/CSS3\344\270\255\344\270\244\347\247\215\346\226\271\346\241\210.html" rename to "\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/8.CSS3\344\270\255\344\270\244\347\247\215\346\226\271\346\241\210.html" diff --git "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/9.\345\217\230\351\207\217\347\232\204\345\256\232\344\271\211\345\222\214\350\265\213\345\200\274.js" "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/9.\345\217\230\351\207\217\347\232\204\345\256\232\344\271\211\345\222\214\350\265\213\345\200\274.js" new file mode 100644 index 0000000..3380332 --- /dev/null +++ "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/9.\345\217\230\351\207\217\347\232\204\345\256\232\344\271\211\345\222\214\350\265\213\345\200\274.js" @@ -0,0 +1,18 @@ +// tb='淘宝'; + +var jd="京东商城"; +// var z="亚马逊';// 双引号" 和单引号' 不能混合使用 +var xx; +/* +* var variable 变量 let const 声明变量的关键字; +* tb 这是变量名 +* = 这是操作符 +* "京东商城" 这个是数据 +* +* 把"京东商城",这段数据,通过=来赋值给jd这个变量名; +* */ +console.log(jd); +console.log(xx);//undefined +// console.log(tb); + +//"京东商城" 字符串"" 和 '' 包裹的内容 属于字符串类型 \ No newline at end of file diff --git "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/ES6\347\232\204\344\273\213\347\273\215\345\222\214Javascript\346\226\207\346\241\243\346\250\241\345\274\217.html" "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/ES6\347\232\204\344\273\213\347\273\215\345\222\214Javascript\346\226\207\346\241\243\346\250\241\345\274\217.html" deleted file mode 100644 index a672889..0000000 --- "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/ES6\347\232\204\344\273\213\347\273\215\345\222\214Javascript\346\226\207\346\241\243\346\250\241\345\274\217.html" +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Title - - - - - - \ No newline at end of file diff --git "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/README.MD" "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/README.MD" index 0b12589..61c9e9d 100644 --- "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/README.MD" +++ "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/README.MD" @@ -17,18 +17,19 @@ # 一、编辑器的选择/开发环境介绍 - WebStorm/IDEA,内置支持zen coding 、nodejs、拿来即用的,遇到gulp、git、markdown文件会智能提示对应的插件等,前端开发的神器,因为需要建立索引,启动时间比较长,占用内存大; - zen coding写法:div#page>div.logo+ul#navigation>li*5>a -- sublime text 启动快,短小精悍型的,配合插件,可实现强大功能,适合喜欢捣腾的,不建议没有编程基础的初学者直接使用,可以编程一段事件后再用; +- sublime text 启动快,短小精悍型的,配合插件,可实现强大功能,适合喜欢捣腾的; +- vscode 类似sublime,但是比sublime好很多; - Editplus 、 Notepad 、 Dreamweaver 这些都不推荐前端开发初学者使用;很多老开发者还在使用,因为习惯,再就是配置了相关的插件,懒得折腾了,所以一直在用,毕竟干活效率才是最重要的;但是对于初学者,还是建议选择合适的; - Atom,github;WEB端编辑器; - 如果您会VIM,编辑器可以还可以用您以前的,主流的编辑器都有VIM语法插件;VIM+webStorm/sublime 等都比较顺手的; - 推荐使用webStorm,把精力放在研究代码上,不要在编辑器上浪费过多时间; -- webstorm官网:http://www.jetbrains.com/webstorm/ (这个网站的下载速度还是可以的,如果有下载不来,联系我下,我贴网盘链接上来 ) +- webstorm官网:http://www.jetbrains.com/webstorm/ (这个网站的下载速度还是可以的,如果有下载不来,可以找第三方下载 ) ##### 开发环境介绍 相比其他语言,JavaScript的优势之一在于不用安装或配置任何复杂的环境就可以开始学习。 -- 编辑器推荐使用webstorm; +- 编辑器推荐使用webstorm/vscode; - 浏览器用Chrome; 这样就可以学习javascript,这门语言了,因为JS代码是执行时候才进行编译,所以环境比较简单;当然,请你不要纠结JavaScript 和 Java之间有什么关系,就好比雷锋和雷峰塔的区别,研究这些问题没有区别,你只需要问自己,想不想了解一些WEB方面的知识,如果你喜欢网页程序,那么跟着敲代码就好了,不要浪费时间; @@ -62,33 +63,33 @@ HTML文件是由N个标签组成的,这些标签元素构成了搭建网站的 - 类型声明(!DOCTYPE)的作用是告诉浏览器,以什么格式渲染下面的文件; - html标签是HTML文件的基础;(HTML标签内一般还会有head和body标签) ![](http://i.imgur.com/7meEaR8.png) + 例如上面这张图片中的HTML代码,就是最基础的HTML文件格式; ##### HTML4和HTML5的区别 最重要的标志,就是看类型声明; -- HTML5是用 这种的声明 -- HTML4是用 这种的声明; +- HTML5是用 ` ` 这种的声明 +- HTML4是用 `` 这种的声明; - 声明推荐是放在 HTML 文档的第一行,位于 标签之前。 +`` 声明推荐是放在 HTML 文档的第一行,位于 标签之前。 -** 为什么HTML和HTML5声明的类型不同? ** +> 为什么HTML和HTML5声明的类型不同? -- 在 HTML 4.01 中, 声明引用 DTD,因为 HTML 4.01 基于 SGML。DTD 规定了标记语言的规则,这样浏览器才能正确地呈现内容。 +- 在 HTML 4.01 中,`` 声明引用 DTD,因为 HTML 4.01 基于 SGML。DTD 规定了标记语言的规则,这样浏览器才能正确地呈现内容。 - HTML5 不基于 SGML,所以不需要引用 DTD。 -**注释**: 声明没有结束标签,并且 声明对大小写不敏感。 +**注释**:`` 声明没有结束标签,并且对大小写不敏感。 -因为这里是告诉浏览器的渲染方式,所以这里绝对此文件是HTML4还是5,不过并没有什么软用,现在一般都是HTML5的声明格式;记住第一个就可以了;这些都不是重点 +因为这里是告诉浏览器的渲染方式,所以这里决定此文件是HTML4还是5,不过并没有什么软用,现在一般都是HTML5的声明格式;记住第一个就可以了;这些都不是重点 -另外HTML5为了更好的符合语义化和升级,新增了下面的标签; -> header、footer、section、audio、video等; +另外HTML5为了更好的符合语义化和升级,新增了 `header`、`footer`、`section`、`audio`、`video` 等标签; ##### 常用标签的简单介绍 -div、ul、li、p、span、a、img、table、tr、th、td、br/hr、h1/h2/h3 +`div`、`ul`、`li`、`p`、`span`、`a`、`img`、`table`、`tr`、`th`、`td`、`br`、`hr`、`h1`、`h2`、`h3` ![](http://i.imgur.com/wanAEUs.png) @@ -99,24 +100,26 @@ div、ul、li、p、span、a、img、table、tr、th、td、br/hr、h1/h2/h3 - id - title -**class**:一个名字可以多个class公用; +`class`:一个名字可以多个class公用; -**id**:一个名字在一个页面里,只能一个标签使用; +`id`:一个ID名在一个页面里,只能被一个标签使用、ID名具有唯一性; -title:title里是自定义的内容,表现是鼠标放上去时候的,文字提示; +`title`:title里是自定义的内容,表现是鼠标放上去时候的,文字提示; -** a标签中的。href** +**a标签中的 `href`** href是Hypertext Reference的缩写。意思是指定超链接目标的URL。href已经是缩写了,很多不知道其中原理的人会念成"赫尔夫",其实这是不正确的;href并不是一个单词,而是一个缩写; -##### HTML规则 +##### HTML书写规范规则 其实个人觉得为了总结而总结是一件很痛苦的事情,记得用zencoding生成的就是标准的书写规范,然后注意下面这句话就可以了; -- 书写HTML标签的规范:标签要闭合,层级要明确,双引号和单引号不能混合使用; +- 标签要闭合 +- 层级要明确 +- 单引号和双引号不要混用; ##### script标签的属性: -script是属性有async,defer,charset,languge,src,type六个;一般常用的就是src,type;而且type是属于可忽略的属性,推荐不写; +script是属性有 `async`,`defer`,`charset`,`languge`,`src`,`type` 六个;一般常用的就是src,type;而且type是属于可忽略的属性,推荐不写; 因为HTML不是这个笔记的总结重点,就先这样了; @@ -137,14 +140,14 @@ script是属性有async,defer,charset,languge,src,type六个;一般 一个完整的javascript实现应该有下列三个不同部分组成: ![](https://raw.githubusercontent.com/Broszhu/zhuanbang-javascript-notes/master/img/path1/javascript.png) -- 核心(ECMAScript):提供核心语言功能; +- `ECMAScript`:提供核心语言功能,是核心,规定了这们语言的书写规范; - var jd="京东商城"; -- 文档对象模型(document object model 简称DOM):提供访问和操作网页内容的方法和接口; +- `DOM`:提供访问和操作网页内容的方法和接口,(document object model 简称DOM 文档对象模型) var oDiv=document.getElementById("div1"); oDiv.innerText="现在已经被我占领了"; -- 浏览器对象模型(browser object model 简称 BOM):提供与浏览器交互的方法和接口;BOM最蛋疼的部分是没有统一的标准;从根本上讲BOM只处理浏览器窗口和框架 +- `BOM`:提供与浏览器交互的方法和接口;BOM最蛋疼的部分是没有统一的标准;从根本上讲BOM只处理浏览器窗口和框架,(browser object model 简称 BOM 浏览器对象模型) windows.location.href @@ -171,7 +174,7 @@ ECMAScript规定了Javascript这门语言的组成部分;主要规定了语法 ``` -> HTML页面,通过DOM可以看成树形图,借助DOM提供的API,可以轻松的增删改查;下面是几个标签的层级关系 +HTML页面,通过DOM可以看成树形图,借助DOM提供的API,可以轻松的增删改查;下面是几个标签的层级关系 ``` @@ -202,7 +205,7 @@ DOM的几个级别的介绍;DOM目前分为三个级别;DOM1级,DOM2级, - DOM3级:引入了以统一方式加载和保存文档的方法(在DOM加载和保存模块中定义);新增了验证文档的方法(在DOM验证模块中定义);DOM3级也对DOM核心进行了扩展,开始支持XML1.0,涉及XML infoset,Xpath和XML Base。 - ##### 3、BOM部分; +##### 3、BOM部分; BOM最蛋疼的部分是没有统一的标准;从根本上讲BOM只处理浏览器窗口和框架;主要有 - 弹出新浏览器窗口的功能; - 移动、缩放和关闭浏览器窗口的功能; @@ -306,7 +309,7 @@ JavaScript中我们学的所有的知识点其实都是基于浏览器内置类 ##### 3、外联式; -** 注意编码格式统一,否则中文会乱码 ** +**注意编码格式统一,否则中文会乱码** 通过script的src属性引用一个文件;关于script的标签位置,按照传统的做法,是写在head元素中;这种做法的目地是把所有外部文件(CSS,JS)的引用都放在相同的地方;可是如果放在顶部;HTML加载的时候,是从上到下依次解析的;页面加载很多HTML的时候,就会堵塞后面的DOM节点加载;导致页面呈现的内容出现延迟,而延迟期间浏览器窗口将是空白的; @@ -365,7 +368,7 @@ JavaScript中我们学的所有的知识点其实都是基于浏览器内置类 项目中,很少会遇到行内写JS的,工作中我只在给wifi组做支撑的时候见到过这么写的;当时他们的wifi管理页面,用luci lua 一个开源项目修改的,页面的HTML CSS,JS是直接渲染出来的,里面的CSS,JS大都是行内写的,维护起来真的太坑了;我在写JS的时候,把需要我写的JS代码和模块,全部外链式引导页面,把CSS,JS和他们lua代码分开;不和他们的代码掺合在一起,否则以后维护起来就太蛋疼了; -##### 嵌入式与外链式的区别? +> 嵌入式与外链式的区别? 在HTML中嵌入javascript代码虽然没有问题,但是一般认为最好的做法还是尽可能使用外部文件来包含javascript代码,不过,并不存在必须使用外链式的规定;但外链式的优点如下 - 维护性好:JS代码和HTML代码混在一起,维护的时候需要改动HTML页面,而现在为了专注和分工明确,基本都是前后端分离的做法;页面输入都是后端的页面;如果是外链式的,只需要维护自己的JS文件即可,不需要接触HTML文件; @@ -389,21 +392,21 @@ href 用于标示资源和文档关系,src 用于替换标签内容 百度 -** 为什么 style不用src** +**为什么 style不用src** 至于说为什么当初就决定外部样式表用link href来链接,而不是用style src来载入,可能是因为第一批互联网人认为样式表更符合外部链接资源的特征,它更接近附属的资源,而不是内嵌的内容。比如考虑alternate stylesheets,在同一时间只需要链接一组样式表,而不是载入所有。当然你可以简单的归结为历史遗留(也就是当初某个浏览器开发者的一个偶然决定导致)。这是一个扯淡的问题,制作标准的人不是中国人,是老外; -** 其它的一些意外** +**其它的一些意外** -有些名词是中国第一批程序员,翻译的问题;最明显的一个名次[上下文],就是代码所在的执行环境,英文 +有些名词是中国第一批程序员,翻译的问题;最明显的一个名次`上下文`,就是代码所在的执行环境,英文 -context,这个应该翻译成[代码运行环境] 才更符合语义,但是第一批互联网人翻译成中文书,都这么写,然后我们这些小辈们为了统一,也都这么叫了; +context,这个应该翻译成`代码运行环境` 才更符合语义,但是第一批互联网人翻译成中文书,都这么写,然后我们这些小辈们为了统一,也都这么叫了; 在HTTP协议的知识里,有一个叫HTTP Referer的;属于请求头(header)的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。 比如从我的博客链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上。链接访问他的网站,以前自己倒腾过网站的朋友,在百度统计,55LA统计之类的,会有这方面的统计信息供查看; -这里的Referer其实应该是英文单词referrer,也不知道是拼错的人太多了导致标准跟着拼错,还是编写标准的人拼错了,开发者讲错纠错,反正现在的情况就都写成HTTP Referer了,只能将错就错的写了。历史遗留问题,无解的; +这里的Referer其实应该是英文单词referrer,也不知道是拼错的人太多了导致标准跟着拼错,还是编写标准的人拼错了,开发者讲错纠错,反正现在的情况就都写成HTTP Referer了,只能将错就错的写了。历史遗留问题,无解; **css中的行内、嵌入式、外链式** 下面就是css的各种写法; @@ -457,7 +460,7 @@ context,这个应该翻译成[代码运行环境] 才更符合语义,但是 不过狭义而言,渐进增强一般说的是使用CSS3技术,在不影响老浏览器的正常显示与使用情形下来增强体验,而优雅降级则是体现html标签的语义,以便在js/css的加载失败/被禁用时,也不影响用户的相应功能。 -#####CSS3中的方案 +##### CSS3中的方案 .transition { /* 渐进增强写法 */ -webkit-transition: all .5s; @@ -519,8 +522,8 @@ CSS不是笔记的重点,所以就不多写了; - 英文全称是variable,定义变量是关键字就是var var a="hello word"; - //var 是变量声明富豪,同样的还有 let const(后面会介绍) - //a 是变量名,可以任意起,但是有些单词是不能用的,后面会介绍 + //var 是变量声明符号,同样的还有 let const(后面会介绍) + //a 是变量名,可以任意起,但是有些单词属于关键字和保留字是不能用的,后面会介绍 //"hello word" 是代表了JS中的数据值; //函数的写法 @@ -531,7 +534,7 @@ CSS不是笔记的重点,所以就不多写了; greetMe("broszhu"); // "Hi broszhu" - 用等号把a和"hello word"连接起来的意思,就是把数据hello word这个字符串赋值给a这个变量;等号右边赋值给等号左边; -- 其中""和''这种包裹的类型,在JS中称为数据类型; +- 其中""和''这种包裹的类型,在JS中称为字符串,是一种数据类型; - 下面这些在JS中都是合规的写法,分别代表不同的类型 var string="2222";//字符串 @@ -601,6 +604,12 @@ Javascript中代表的数据的变量,可以随意修改类型;但是不建 console.log方法能接收多个参数,除了console.log("string" + num)还可以写成console.log("string", num); + console.log("info","haha"); + console.log("info2"+"haha2"); + + console.warn("这是一段警告信息"); + console.error("出错啦,你的配置信息有误"); + 当然单个的也是可以的; **[↑ 返回目录](#zero)** @@ -640,7 +649,11 @@ ECMAScript 是JavaScript语言的下一代标准,已经在2015年6月正式发 要学习Javascript,ES5是必须会的,如果ES5的基础打的好,ES6一个礼拜就熟练入手了,因为他是ES6是基于ES5的改变和优化,你知道其中的原理后,很容易过渡,现在浏览器也没有全面支持,你有大把的时间研究ES5,ES5才是根基,等ES6,ES8全面普及了,笔记里会总结ES6,但是正常的演示代码基于ES5; -代码初衷是兼容到IE8的;但是很多时候,在IE8兼容的JS,IE67中也就基本没大问题了,最多有点小问题,兼容到IE6,和兼容到IE8的代码量几乎差不多,所以就向下兼容,最多会兼容到IE6 + //ES6- 是ECMAScrip2015 不是ECMAScrip5 + //ES8- 是ECMAScrip2017 不是ECMAScrip8 + 主流开发方式是:ES6+开发,客户端应用会转成ES5 + +代码初衷是兼容到IE8的;但是很多时候,在IE8兼容的JS,IE67中也就基本没大问题了,最多有点小问题,兼容到IE6,和兼容到IE8的代码量几乎差不多,所以就向下兼容,最多会兼容到IE6,现在都2018年了,企业的开发,很多只兼容chrome了; **[↑ 返回目录](#zero)** diff --git "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/console.html" "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/console.html" deleted file mode 100644 index 4902b31..0000000 --- "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/console.html" +++ /dev/null @@ -1,37 +0,0 @@ - - - - - Title - - - - - - \ No newline at end of file diff --git "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/index.html" "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/index.html" deleted file mode 100644 index f4b77a7..0000000 --- "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/index.html" +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - 浏览器的标题头11 - - -
这是DIV标签
-

这是p标签1

-
-
-
-

这是p标签2

- 百度一下,你就知道 -
-
- 百度一下,你就知道2 -
-

ddasdasdasdasdasdasd

-

ddasdasdasdasdasdasd

-
-

ddasdasdasdasdasdasd

- -

222

-
    -
  1. 1
  2. -
  3. 222
  4. -
  5. 333
  6. -
  7. 444
  8. -
- 这是百度的图片 - -

这是h1

-

这是h2

-

这是h3

-

这是h4

-
这是h5
- - - - - - - - - - - -
123
123
- - diff --git "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/\345\217\230\351\207\217\347\232\204\345\256\232\344\271\211\345\222\214\350\265\213\345\200\274.html" "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/\345\217\230\351\207\217\347\232\204\345\256\232\344\271\211\345\222\214\350\265\213\345\200\274.html" deleted file mode 100644 index f858c0e..0000000 --- "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/\345\217\230\351\207\217\347\232\204\345\256\232\344\271\211\345\222\214\350\265\213\345\200\274.html" +++ /dev/null @@ -1,66 +0,0 @@ - - - - - Title - - - - - - - - - - \ No newline at end of file diff --git "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/\345\217\230\351\207\217\347\232\204\347\261\273\345\236\213\345\217\257\344\273\245\350\242\253\351\232\217\346\227\266\346\224\271\345\217\230.html" "b/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/\345\217\230\351\207\217\347\232\204\347\261\273\345\236\213\345\217\257\344\273\245\350\242\253\351\232\217\346\227\266\346\224\271\345\217\230.html" deleted file mode 100644 index 8cb58bb..0000000 --- "a/\345\211\215\347\253\257\345\274\200\345\217\221\345\210\235\350\257\206/\345\217\230\351\207\217\347\232\204\347\261\273\345\236\213\345\217\257\344\273\245\350\242\253\351\232\217\346\227\266\346\224\271\345\217\230.html" +++ /dev/null @@ -1,38 +0,0 @@ - - - - - Title - - - - - \ No newline at end of file diff --git "a/\345\217\230\351\207\217\345\243\260\346\230\216\345\222\214\345\216\237\347\220\206/1.var.js" "b/\345\217\230\351\207\217\345\243\260\346\230\216\345\222\214\345\216\237\347\220\206/1.var.js" new file mode 100644 index 0000000..7ed4017 --- /dev/null +++ "b/\345\217\230\351\207\217\345\243\260\346\230\216\345\222\214\345\216\237\347\220\206/1.var.js" @@ -0,0 +1,4 @@ +var name="朱安邦", + gender; +console.log(name,typeof name); //朱安邦 string +console.log(gender,typeof gender); //undefined "undefined" \ No newline at end of file diff --git "a/\345\217\230\351\207\217\345\243\260\346\230\216\345\222\214\345\216\237\347\220\206/2.const\345\222\214let.js" "b/\345\217\230\351\207\217\345\243\260\346\230\216\345\222\214\345\216\237\347\220\206/2.const\345\222\214let.js" new file mode 100644 index 0000000..d28edfc --- /dev/null +++ "b/\345\217\230\351\207\217\345\243\260\346\230\216\345\222\214\345\216\237\347\220\206/2.const\345\222\214let.js" @@ -0,0 +1,5 @@ +const myName="zhu"; +let age=2; +age =22; +// myName=4;//Error +console.log(age); \ No newline at end of file diff --git "a/\345\217\230\351\207\217\345\243\260\346\230\216\345\222\214\345\216\237\347\220\206/3.let\345\222\214var.js" "b/\345\217\230\351\207\217\345\243\260\346\230\216\345\222\214\345\216\237\347\220\206/3.let\345\222\214var.js" new file mode 100644 index 0000000..5d590da --- /dev/null +++ "b/\345\217\230\351\207\217\345\243\260\346\230\216\345\222\214\345\216\237\347\220\206/3.let\345\222\214var.js" @@ -0,0 +1,8 @@ +if(true){ + var a=2; +} +if(true){ + let b=3; +} +console.log(a); +console.log(b);//b is not defined \ No newline at end of file diff --git "a/\345\217\230\351\207\217\345\243\260\346\230\216\345\222\214\345\216\237\347\220\206/README.MD" "b/\345\217\230\351\207\217\345\243\260\346\230\216\345\222\214\345\216\237\347\220\206/README.MD" index aab81ee..f1e52ce 100644 --- "a/\345\217\230\351\207\217\345\243\260\346\230\216\345\222\214\345\216\237\347\220\206/README.MD" +++ "b/\345\217\230\351\207\217\345\243\260\346\230\216\345\222\214\345\216\237\347\220\206/README.MD" @@ -10,20 +10,24 @@ 在javascript里 声明变量简写为 var ;通过var name 就可以声明一个变量了; 注意变量的声明和定义是两回事; -- var name ->变量的声明 -- name="朱安邦" ->变量的定义 -- var name=”朱安邦” ->变量的声明加定义; +```$xslt +var name; //变量的声明 +name="朱邦邦"; //变量的定义 +var name="朱邦邦"; //变量的声明加定义 +``` -> var name=”朱安邦”;其实是实现两步; +> var name=”朱邦邦”;其实是实现两步; > 第一步 var name;先声明一个name的变量; -> 第二步 name=”朱安邦” 创建数据"朱安邦"这个字符串,并且把字符串"朱安邦"这条数据赋值给name这个变量;在定义(赋值)变量的name值; +> 第二步 name=”朱邦邦” 创建数据"朱邦邦"这个字符串,并且把字符串"朱邦邦"这条数据赋值给name这个变量;在定义(赋值)变量的name值; > > 这个时候name的类型就是所代表值的类型;可以通过typeof来检测;通过检测可以知道这个变量所代表的值是一个字符串类型的数据; - var name="朱安邦", - gender; - console.log(name,typeof name); //朱安邦 string - console.log(gender,typeof gender); //undefined "undefined" +```$xslt +var name="朱邦邦", + gender; +console.log(name,typeof name); //朱邦邦 string +console.log(gender,typeof gender); //undefined "undefined" +``` 虽然关键字var不是必须的,但是最好每次声明一个新变量都加上; @@ -46,7 +50,7 @@ - 关于关键字和保留字,这个可以拿生活中的现象举例子,大人给小孩起名字的时候,小孩的名字一定不能和他父亲母亲的名字一样;当然也不能和爷爷,奶奶,外公,外婆,舅舅,姑姑等等这些名字一样;这个就是现实中约定俗成的规则; - 在JS中,也有些单词是有特殊意义的,或者是为了以后语言升级做准备的;而这些单词就不能作为变量名;比如前面接触的typeof,function;这样的单词就不能作为变量名; -- 4、变量区分大小写,test和Test是不一样的,必须严格一样,才算是一个变量的;(在javascript里,onclick必须要写出onclick,不能写成onClick;) +- 4、变量区分大小写,test和Test是不一样的,必须严格一样,才算是一个变量的;(在javascript里,`onclick` 必须要写出`onclick`,不能写成`onClick`;) ##### 变量命名的优化方法(推荐遵守的,非强制); @@ -80,18 +84,27 @@ - Class名:用”-”连接符的方法;class=”header-nav” 比如这样的; - JS变量名:myRoomDoorKey;小驼峰 - data-diy_attr 自定义属性; -- j-trigger-target JS中需要用的雷类名 +- j-trigger-target JS中需要用的类名 - jQuery对象名:$myKey;小驼峰前面加$;这种方法是从匈牙利+驼驼峰总结出来的;其实真实项目中,很少有匈牙利命名法的;匈牙利命名法见过最多的都是出现在写DEMO的时候用; -- 除非特别难起的变量名,否则不要用中文拼音做变量名;不要听信某些教材和视频中说的严禁用拼音命名的话,有的甚至还把linux创始人林纳斯的代码风范拿出来说事。其实那些并没有什么软用;开始就和大家说了变量是用来区别不同数据的;而优化变量名的意义在于能够快速识别这个变量名所代表的数据;比如你要记录游戏场景下的角色出血值;你还要想半天单词,或者找翻译,然后起出来的变量名,自己下次看到或者别人看到的时候还要去翻译或者思考下;这种情况下,为什么不直接用 chuxue这种的方式呢?只需要后面加一行注视说明什么意思就可以了;我个人是很反感为了遵守优化规则而脱裤子放屁的方式的;曾经在项目中遇到过一个真实的事;某个变量看了半天不知道到底代表什么意思(因为当时有接触到差不多10种的用户相关类型的金额数),查了翻译也没有查到;后来问了下,才知道那个坑货把单词给拼错了两个字母; +- 除非特别难起的变量名,否则不要用中文拼音做变量名,但是遇到难起的变量名,使用中文也别有负担,但是禁止中英文混搭; +- 注释可以辅助整理思路; -
- -
- 打开演示窗口 - - 设置演示数据 -
-
+不要听信某些教材和视频中说的严禁用拼音命名的话,有的甚至还把linux创始人林纳斯的代码风范拿出来说事。其实那些并没有什么软用;开始就和大家说了变量是用来区别不同数据的;而优化变量名的意义在于能够快速识别这个变量名所代表的数据; + +比如你要记录游戏场景下的角色出血值;你还要想半天单词,或者找翻译,然后起出来的变量名,自己下次看到或者别人看到的时候还要去翻译或者思考下;这种情况下,为什么不直接用 chuxue这种的方式呢?只需要后面加一行注视说明什么意思就可以了; + +很反感为了遵守优化规则而脱裤子放屁的方式的;曾经在项目中遇到过一个真实的事;某个变量看了半天不知道到底代表什么意思(因为当时有接触到差不多10种的用户相关类型的金额数),查了翻译也没有查到;后来问了下,才知道那个坑货把单词给拼错了两个字母; + +```$xslt +
+ +
+ 打开演示窗口 + + 设置演示数据 +
+
+``` **[↑ 返回目录](#zero)** @@ -101,7 +114,7 @@ 变量通过var来声明; -有些要避免的,否则后面写代码的时候可能会把自己给坑了; +下面是要避免的,否则写代码的时候可能会把自己给坑了; - 重复声明; - 不声明直接赋值 @@ -110,38 +123,49 @@ > 推荐:先声明,后定义; - 需要读写的变量,读写前,一定要声明; -- 需要运算的变量,运算器,一定要赋值; +- 需要运算的变量,运算前,一定要赋值; - 书写的时候,推荐把变量名放在页面的上面(上部分)去声明+定义;这样不仅可以放心大胆的用,而且可以方便查找变量; - 在任何情况下声明变量都要用var先声明;在使用一个变量之前应当先声明,变量是使用关键字var来声明的; - var a=1; - function test(){ - var b=c=2;//这时候会隐式声明全局变量; - } - test(); - console.log(a,c) -> 这种是非常不好的写法;不要写var a=b=c=1;这种声明;上面代码中c就会被隐式声明为全局变量;下面这种写法是可以的 +```$xslt + var a=1; + function test(){ + var b=c=2;//这时候会隐式声明全局变量; + } + test(); + console.log(a,c) +``` - var a= 1,c; - function test(){ - var b=c=2; - } - test(); - console.log(a,c) +上面是非常不好的写法;不要写 `var b=c=2` 这种声明;上面代码中c就会被隐式声明为全局变量; -> 因为开始c已经声明了;后面是给c赋值; +下面这种写法是可以的 -推荐下面这种写法; +```$xslt +var a= 1,c; +function test(){ + var b=c=2; +} +test(); +console.log(a,c) +``` + +因为开始c已经声明了,后面只是给c赋值; + +多个变量声明赋值时候,同一类的变量推荐下面这种写法; var name="zhuanbang", age=26, height="174cm"; 这样既可以简洁,又保证可读性; -注意:任何变量赋值前都需要声明变量,不要隐式创建全局变量; + +**注意:任何变量赋值前都需要声明变量,不要隐式创建全局变量;** ##### 重复声明和遗漏声明的区别: -在javascript里使用var重复声明是合法而且不会有任何事情的,如果重复声明带有初始化的值,那么就和一条简单的赋值语句没有什么两样,但是如果你忘记声明了,视图读取一个没有声明的变量的值,javascript可能会报错;在严格模式中,给一个没有声明的变量赋值也是会报错的;非严格模式下虽然不会报错,但是不要抱着侥幸的心理;这是一个不好的习惯,会造成很多bug;建议始终使用var来声明变量; + +在javascript里使用 `var` 重复声明是合法而且不会有任何事情的,如果重复声明带有初始化的值,那么就和一条简单的赋值语句没有什么两样,但是如果你忘记声明了,试图读取一个没有声明的变量的值,javascript可能会报错; + +在严格模式中,给一个没有声明的变量赋值也是会报错的;非严格模式下虽然不会报错,但是不要抱着侥幸的心理;这是一个不好的习惯,建议始终使用var来声明变量; ES6扩展了2种声明方法; @@ -158,8 +182,27 @@ ES6扩展了2种声明方法; 常量不可以通过赋值改变其值,也不可以在脚本运行时重新声明。它必须被初始化为某个值。 +```$xslt +const myName="zhu"; +let age=2; +age =22; +// myName=4;//Error +console.log(age); +``` + 常量的作用域规则与 let 块级作用域变量相同。若省略const关键字,则该标识符将被视为变量。 +```$xslt +if(true){ + var a=2; +} +if(true){ + let b=3; +} +console.log(a); +console.log(b);//b is not defined +``` + 在同一作用域中,不能使用与变量名或函数名相同的名字来命名常量。 **[↑ 返回目录](#zero)** @@ -186,18 +229,20 @@ ES6扩展了2种声明方法; ECMAScript规定变量包含两种不同数据类型的值,基本类型值和引用类型值;在给变量赋值的时候,解析器必须要明确这个值是基本类型还是引用类型值,因为他们的赋值方式是不同的;string/number/boolean/null/undefined都是基本数据类型;因此可以操作保存在变量中是实际值,此时变量储存的是实际的值;而引用类型的值是保存在内存中的,此时变量储存的是内存的地址,而不是真实的值;而我们操作引用类型的变量时,实际操作的是它引用地址对应的对象,而不是直接操作对象的; 基本类型和引用类型的操作原理 - var number1= 1, - number2=number1; - number1=2;//改变了number1的值 - console.log(number1);//2 - console.log(number2);//1 - console.log(number1===number2);//false - - var obj1={name:"zhu"}, - obj2=obj1; - obj1.name="zhuanbang"; - console.log(obj1.name,obj2.name);//zhuanbang,zhuanbang - console.log(obj1.name===obj2.name);//true +```$xslt +var number1= 1, + number2=number1; +number1=2;//改变了number1的值 +console.log(number1);//2 +console.log(number2);//1 +console.log(number1===number2);//false + +var obj1={name:"zhu"}, +obj2=obj1; +obj1.name="zhuanbang"; +console.log(obj1.name,obj2.name);//zhuanbang,zhuanbang +console.log(obj1.name===obj2.name);//true +``` ![](https://raw.githubusercontent.com/Broszhu/zhuanbang-javascript-notes/master/img/path1/dataType.png) @@ -264,33 +309,39 @@ ECMAScript规定变量包含两种不同数据类型的值,基本类型值和 ###### 注释 javascript的注释。单行注释是"//注释文字",多行注释是/*注释文字*/ - //注释文字 +```$xslt +//注释文字 - /* - * 多行注释1 - * 多行注释2 - * / +/* +* 多行注释1 +* 多行注释2 +* / +``` ##### 语法建议: +```$xslt //bad var a=2 //没有分号,也是可以的,但是不推荐这么做;压缩的时候可能会出错; 理论上加分号性能会更好,浏览器不必花时间判断是否要加分号了(无论加不加分号,浏览器解析的时候会判断的,如果需要加的地方没有加,浏览器解析时候会加上去之后再解析) //good var b=3; +``` ##### 不建议使用var a=b=c=1;这种的写法; if-else 推荐加上{}; - //bad - if(true) - console.log("bad");//有效,但是容易出错,不要使用; +```$xslt +//bad +if(true) + console.log("bad");//有效,但是容易出错,不要使用; - //good - if(true){ - console.log("good");//推荐使用,可以降低修改代码时出错的几率,可以让代码的意图更明确; - } +//good +if(true){ + console.log("good");//推荐使用,可以降低修改代码时出错的几率,可以让代码的意图更明确; +} +``` 分号很多地方是可选的,推荐除了{}外都给加上;语句也可以换行的,但是有两个例外不能换行 @@ -300,7 +351,7 @@ if-else 推荐加上{}; **[↑ 返回目录](#zero)** -## 六、面试题: +## 六、练习题: 01-02-01、var a=b=c=d=1是什么意思?如果接下来在写一句a=9;a,b,c的值分别是多少? 01-02-02、var a=b=c=d=[1,2,3,4,5]是什么意思?如果接下来再写一句d[5]=0,a,b,c的值分别是多少? 01-02-03、var a=b=c=d=[1,2,3,4,5]是什么意思?如果接下来在写一句d=[0],a,b,c的值会发生变化吗? @@ -311,10 +362,12 @@ if-else 推荐加上{}; 01-02-08、说一说html代码,css代码和js代码的注释写法; 01-02-09、以下哪些单词不属于javascript保留字 - A、with - B、parent - C、class - D、void +```$xslt + A、with + B、parent + C、class + D、void +``` - diff --git "a/\345\217\230\351\207\217\345\243\260\346\230\216\345\222\214\345\216\237\347\220\206/var.html" "b/\345\217\230\351\207\217\345\243\260\346\230\216\345\222\214\345\216\237\347\220\206/var.html" deleted file mode 100644 index af9cf29..0000000 --- "a/\345\217\230\351\207\217\345\243\260\346\230\216\345\222\214\345\216\237\347\220\206/var.html" +++ /dev/null @@ -1,23 +0,0 @@ - - - - - Title - - -
- -
- 打开演示窗口 - - 设置演示数据 -
-
- - - \ No newline at end of file diff --git "a/\345\217\230\351\207\217\345\243\260\346\230\216\345\222\214\345\216\237\347\220\206/\346\225\260\346\215\256\345\202\250\345\255\230\345\216\237\347\220\206.js" "b/\345\217\230\351\207\217\345\243\260\346\230\216\345\222\214\345\216\237\347\220\206/\346\225\260\346\215\256\345\202\250\345\255\230\345\216\237\347\220\206.js" new file mode 100644 index 0000000..4756d05 --- /dev/null +++ "b/\345\217\230\351\207\217\345\243\260\346\230\216\345\222\214\345\216\237\347\220\206/\346\225\260\346\215\256\345\202\250\345\255\230\345\216\237\347\220\206.js" @@ -0,0 +1,71 @@ +//基本类型 +var a=2; +var b=a; +a.aaa="adjklasjdk"; +console.log(a.aaa); +console.log(a,b);//2 2 +b=4; +console.log(a,b);//2 4 + + +//引用数据类型; +var oDemo1={ + name:"zhu", + say:"hello" +}; +var oDemo2=oDemo1; +console.log(oDemo1);//{name: "zhu", say: "hello"} +console.log(oDemo2);//{name: "zhu", say: "hello"} + +oDemo2.name="changeName";//这个时候修改,其实已经把oDemo1的数据给修改了 +console.log(oDemo1);//{name: "changeName", say: "hello"} +console.log(oDemo2);//{name: "changeName", say: "hello"} + +oDemo1.hahahahahah="ddddddd"; +console.log(oDemo1);//{name: "changeName", say: "hello", hahahahahah: "ddddddd"} +console.log(oDemo2);//{name: "changeName", say: "hello", hahahahahah: "ddddddd"} + + +var sy=Symbol();//sy是Symbol的一个实例; +console.log(sy.__proto__); +sy.aaa="hahah"; +console.log(sy.aaa); + + +// +var oDemo3={ + name:"zhu", + say:"hello" +}; +var oDemo4=oDemo3;//AAA +console.log("---------------------"); +console.log(oDemo3); +console.log(oDemo4); +oDemo4={name:"changeName"};//把{name:"changeName"} 对应的堆内存地址赋值给oDemo4 BBB +console.log(oDemo3);//{name: "zhu", say: "hello"} +console.log(oDemo4);//{name: "changeName"} + +var sourcesDate={ + date:[ + { + pro:"浙江省", + city:"杭州市", + cityCode:"330001", + total:"13.05" + }, + { + pro:"浙江省", + city:"宁波市", + cityCode:"330002", + total:"78.05" + }, + { + pro:"浙江省", + city:"温州市", + cityCode:"330003", + total:"66.05" + } + ] +}; +var beauDate=sourcesDate; +//$.exetend({},sourcesDate); \ No newline at end of file diff --git "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/0.\345\220\204\347\247\215\346\225\260\346\215\256\347\261\273\345\236\213.js" "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/0.\345\220\204\347\247\215\346\225\260\346\215\256\347\261\273\345\236\213.js" new file mode 100644 index 0000000..e492c74 --- /dev/null +++ "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/0.\345\220\204\347\247\215\346\225\260\346\215\256\347\261\273\345\236\213.js" @@ -0,0 +1,33 @@ +console.log(typeof "hello");//console.log()控制台输出内容 +console.log(typeof 222);//"number" +console.log(typeof '222');//"string" +console.log(typeof false); +console.log(typeof "false");//这个上面的都是基本数据类型/ +console.log(typeof null);//object//object function 是引用数据类型; +console.log(typeof {}); +console.log(typeof function () {});//function + +//变量是数据的代言人; +var demoStr="hello"; +console.log("-----------------------"); +console.log(typeof demoStr);//string +demoStr=22;//不推荐这么做 ; +console.log(typeof demoStr);//number + +//typeof 总是返回string类型的; typeof() +console.time("123"); +console.log("+++++++++++++++++++++"); +console.log(typeof (typeof "hello")); +console.log(typeof (typeof 222)); +console.log(typeof typeof '222'); +console.log(typeof typeof false); +console.log(typeof typeof "false"); +console.log(typeof typeof null); +console.log(typeof typeof {}); +console.log(typeof typeof function () {}); +console.timeEnd("123"); + +console.assert(1==1,"打脸了"); + +var aloneVal=Symbol(); +console.log(typeof aloneVal);//symbol 存在的意义,避免多人开发时,变量覆盖; \ No newline at end of file diff --git "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/1.String.js" "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/1.String.js" new file mode 100644 index 0000000..b356733 --- /dev/null +++ "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/1.String.js" @@ -0,0 +1,53 @@ +//string 单引号'' / 双引号""包裹的内容 +/*alert(typeof "22"); +alert(typeof '22'); +alert(typeof ""); +alert(typeof '');*/ +console.log(typeof "22"); +console.log(typeof '2'); +console.log(typeof ''); +console.log(typeof ""); +console.log(typeof "false"); + +console.log(typeof "null"); + +//length,一般作为用户输入店名/用户名的长度限制;需要注意双字符精准度的问题; +var str="123123123123123123123123123123"; +var chinaStr="哈喽";//双字节,不精确 4字节; +console.log(str.length); +console.log(chinaStr.length);//2 + +//字符串创建的原理; +var str1="12345";//把"12345"这个字符串赋值给str1这个变量; +str1="1234";//把"1234"这个字符串赋值给str1这个变量; +/* +* 并不是把"12345"修改为"1234"然后赋值给str1 +* +* */ +console.log(str1);//"1234" +console.log('1"23\'4\n56\'78'); +// alert("1213123\naaaaaa") + +//toString方法; +//22 - > "22" +console.log(typeof 22); +console.log(typeof (22).toString()); +var testStr=22+"";//隐式调用toString方法 +console.log(typeof 22+"");//+ - * / 2*2+10 +console.log(typeof testStr);//2*(2+10) + +//eval() +console.log("00000000000000000"); +console.log(eval("22+12"));//"22+12" -> 22+12 ->34 + + +// +console.log("**********************"); +console.log(typeof (22+""));//string 22 -> "22" +console.log(typeof (+"22"));//"22" -> 22 单目运算符+ +console.log([1,2,3,4]+"");//1,2,3,4 + +console.log("**********************"); +console.log("1.1" + 1.1); +console.log(+"1.1" + 1.1); +console.log((+"1.1") + (+1.1)); \ No newline at end of file diff --git "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/2.Number.js" "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/2.Number.js" new file mode 100644 index 0000000..838c098 --- /dev/null +++ "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/2.Number.js" @@ -0,0 +1,68 @@ +//正数,负数,零,NaN都是属于Number +// ***NaN -> Not a Number不是一个数,但是属于数字类型;** +console.log(typeof 222); +console.log(typeof 222.22); +console.log(typeof -10); +console.log(typeof -10.34); +console.log(typeof 0); +console.log(typeof -0); + +//NaN +console.log((22*"aa"));//NaN number +console.log(typeof (22*"aa"));//number +console.log(22==22);//true 单个等于号是赋值的意思; Invalid left-hand side in assignment +//== 两个等于号才是判断; +console.log((22*"aa")==(22*"bb"));//false +console.log((22*"aa")==22);//false + +//inNaN +console.log(isNaN(22*"aa"));//true (22*"aa")计算出的值不是一个数,对吗? 对; +console.log(isNaN(22));// 22这个值不是一个数,对吗? 不对; false (NaN -> Not a Number不是一个数,) + +//number的转换方法; 别的数据类型转为数字类型;(不一定是字符串) +/* 五种 转为数字的; +* +"22" 字符串转为数字; +* "22"-0 +* Number() +* parseInt() +* parseFloat() +* */ +console.log("+++++++++++++++++++++++++");//隐式 +console.log(+"22");//隐式 +console.log(Number("22"));//显式 22 +console.log(Number(false));//显式 ->0 +console.log(Number(true));//显式 ->1 +console.log(Number(null));//显式 -> 0 +console.log(Number(undefined));//显式 NaN +console.log(Number({}));//显式 +console.log(Number("22.22")); +console.log(Number("22.22a"));//失败了 NaN + + +console.log(parseInt("22.22a"));//22 +console.log(parseFloat("22.22a222"));//22.22 +console.log(parseFloat("22.22.22"));//22.22 + +// + - * / + +console.log(("++++++++")); +console.log(13%10); //13/10 3 多余的3 会被输出 +console.log(5%3);//2 + +var time=623648364569346563463;//time单位是秒;转为X分X秒; +var minis=parseInt(time/60);//保存是分钟 +var second=time%60;//3 +var targetVal=minis+"分"+second+"秒"; + +console.log(" minis:"+minis+" second:"+second); +console.log(targetVal); +//小练习: +/* +* var time=623648364569346563463;//time是怎么得到的》当前的服务器时间 - 双11 这个阶段多少秒; +* 是多少天,多少小时,多少分钟,多少秒; +* */ + + +console.log("***********************"); +console.log("22"-1);//"22" -> 22 -> (22-1) -> 21 +console.log("22"-0); \ No newline at end of file diff --git "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/3.Boolean.js" "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/3.Boolean.js" new file mode 100644 index 0000000..9eac1e6 --- /dev/null +++ "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/3.Boolean.js" @@ -0,0 +1,64 @@ +var a=52; +var b=30; + +function demoBoolean(a, b) { + if (a>b){//2>30 -> false + console.log(a+" 大于 " +b) + }else if(a==b){//2==30 -> false + console.log(a+" 等于 " +b) + }else{ + console.log(a+" 小于 " +b) + } + console.log(a>b); + console.log(a==b); + + + if(null){ + console.warn("条件为真的时候才输出") + }else{ + console.warn("if条件为假的时候才输出") + } +} + +demoBoolean(a,b); +/* +* 如果a>B; ->"a的值"大于"b的值" +* 如果a==B;->"a的值"等于"b的值" +* 如果a"a的值"小于"b的值" +* +* */ + + +/* ................................非常重要。。。。。。。。。。 +* 哪些值是false(false本身) +* 数字:0、-0 、NaN、 +* 字符串:''(空字符串) +* null 、 +* undefined、 +* */ + +console.log("---------------------------------"); +console.log(Boolean(0)); //false +console.log(Boolean(-0)); //false +console.log(Boolean(1)); //true +console.log(Boolean(-5)); //true +console.log(Boolean("222"));//true +console.log(Boolean('')); //false 空的字符串 +console.log(Boolean(" ")); //true 包含空格的字符串 +console.log("---------------------------------"); +console.log(Boolean("0"));//true +console.log(Boolean(null));//false +console.log(Boolean(undefined));//false +console.log(Boolean({}));//true +console.log(Boolean(function () {}));//true +console.log(Boolean(false));//false +console.log("---------------------------------"); +console.log(Boolean(55*"asd"));// NaN false + + +// ! !! +console.log("************************"); +console.log(Boolean(0));//false +console.log(Boolean(!0));//true +console.log(!0);//true 原理: 0 隐式的调用Boolean方法Boolean(0) -> false -> !false ->true +console.log(!!0);// !(!false)->!true ->false diff --git "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/4.null\345\222\214undefined.js" "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/4.null\345\222\214undefined.js" new file mode 100644 index 0000000..68e6709 --- /dev/null +++ "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/4.null\345\222\214undefined.js" @@ -0,0 +1,75 @@ +// var NULL=2; +console.log(typeof null);//object 这是一个空的指针; +console.log(typeof NULL);// NULL- >undefined + +//结果是undefined 除了用在typeof外,会报错; +console.log(undefined*15);//NaN +// console.log(undefined*aa);//aa is not defined +// console.log(NULL+15);//NULL is not defined 相当于NULL 这个变量没有找到; + +// +var js; +console.log(js);//undefined +console.log(typeof undefined);//undefined +console.log(typeof typeof undefined);//string + + +//null和undefined比较 +/* +* === 相同比较,首先判断是否是同一个类型;不是的话,直接false; +* == 比较是否相等;(如果是不一样的类型,会转为相同的类型,然后再进比较) +* */ +console.log(null == null);//true +console.log(null == undefined);//true +console.log(undefined == undefined);//true +console.log(undefined === undefined);//true +console.log(null === undefined);//false null->Null undefined -> Undefined +console.log(false == 0);//true false->0 0==0? true +console.log(Number("22") == 22);//true "22"隐士的调用Number->22 -> 22== 22 -> true + + +console.log("---------------------------"); +console.log(null == 1);//false +console.log(null == "2312312");//false +console.log(null == false);//false +console.log(null == 0);//false +console.log(null == "");//false +console.log(null == NaN);//false + +console.log("++++++++++++++++++++++++++"); +console.log(undefined == 1);//false +console.log(undefined == "2312312");//false +console.log(undefined == false);//false +console.log(undefined == 0);//false +console.log(undefined == "");//false +console.log(undefined == NaN);//false + + +//应用场景经常出现在 做定时器的时候; +var timer=null; + + + +// 对象的属性 +var oDemo={ + // aaa:"这是oDemo的aaa值" +}; +oDemo.bbb="Hello"; + +console.log(oDemo.aaa);//undefined +console.log(oDemo.bbb);//Hello + + +//ByIn +var oDiv1=document.getElementById("div1"), + oDiv2=document.getElementById("div2"); +console.log(oDiv1); +console.log(oDiv2);//null + +//function 返回值 默认是undefined; + +function demo() { + return; +} +var aDemo=demo(); +console.log(aDemo);//undefined \ No newline at end of file diff --git "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/5.Object.js" "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/5.Object.js" new file mode 100644 index 0000000..c03faf3 --- /dev/null +++ "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/5.Object.js" @@ -0,0 +1,68 @@ +var num=2; +console.dir(num);//number 实例 +console.dir(num.__proto__);//Number 类 +/* +* +* constructor :Object +* +* +* */ + +var str="haha"; +console.dir(str);//string 实例 +console.dir(str.__proto__);//String 类 + + +/*判断是否一致*/ +console.log(num.__proto__.__proto__=== str.__proto__.__proto__);//true + + +//万物皆对象,并不等于只有一个对象类型的; +// Number / String / Object / Boolean + + +//key:value +//1、字面量的创建方式;推荐的方式 +var o={ + name:"zhu", + say:"hello" +}; +console.log(o);//{name: "zhu", say: "hello"} + +var oDemo={}; +// oDemo.name1= +if(!oDemo.flagVal){ + oDemo.flagVal="Test" +} +oDemo.name="bang"; +oDemo.say="hahahahahahahha"; +console.log(oDemo.flagVal);//Test +console.log(oDemo);//{flagVal: "Test", name: "bang", say: "hahahahahahahha"} + +//new +var demo1=new Object();//不推荐的使用方法; +demo1.haha="hahahahahahah"; +console.log(demo1);//{haha: "hahahahahahah"} + +//jQuery的AJAX; +/*var options={ + url:"babababab", + type:"", + date:{} +}; +$.ajax(options);*/ + + +function Test(opt) { + //bala bala +} +var testVal=Test({a:"",b:""}); + +//Array; +var a=[1,2,3,4,5,6,7];//var a=[1,2,3,4,5,6,7,] 低版本浏览器,length的; +console.log(a);//编程语言里,index是以0为开始的; +console.log("第一位,a[0]",a[0]); +console.log(a[1]); +console.log(a.length);//7 + +// -> // diff --git "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/6.Symbol.js" "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/6.Symbol.js" new file mode 100644 index 0000000..9e07bf9 --- /dev/null +++ "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/6.Symbol.js" @@ -0,0 +1,38 @@ +//创建 +let aloneVal = Symbol();//注意不要用new来生成new;即时在ES5中,除了使用自己定义构造函数外,也不推荐加new; +console.log(typeof aloneVal);//symbol + +//Symbol里面的参数,是描述使用的;仅仅是为了控制输出时候方便识别,没有别的用了; +const s1 = Symbol('foo'); +const s2 = Symbol('bar'); +console.log(s1,s2);//Symbol(foo) Symbol(bar) + +//和NaN一样,连自己都不等于自己:因为里面的参数只是一个描述; +console.log(Symbol("foo") == Symbol("foo"));//false +console.log(Symbol("") == Symbol(""));//false +console.log(Symbol() == Symbol());//false 连自己都不等于自己: +const foo = Symbol(); +const bar = Symbol(); +const symbolVal = Symbol("11"); +console.log(typeof foo , typeof bar);//symbol symbol +console.log(typeof foo === "symbol");//true +console.log(typeof bar === "symbol");//true +console.log(bar === bar);//true 当然如果用变量储存,俩个变量是相等的,但这并不说明2个相同Symbol值是相同的 +console.log(bar === foo);//false +console.log(symbolVal);//Symbol(11) + +//Symbol不可以进行运算,但是可以转换为字符串和布尔值,但是不能转为数值; +const sym=Symbol("flag"); +//console.log(sym+"hello baby");// Cannot convert a Symbol value to a string +console.log(String(sym)+"hello one");//Symbol(flag)hello one +console.log(sym.toString()+"hello two");//Symbol(flag)hello two +console.log(Boolean(sym),typeof Boolean(sym));//true "boolean" +console.log(Number(sym));//Cannot convert a Symbol value to a number + +let obj = {}; +obj[foo] = "foo"; +obj[bar] = "bar"; +JSON.stringify(obj); // {} +Object.keys(obj); // [] +Object.getOwnPropertyNames(obj); // [] +Object.getOwnPropertySymbols(obj); // [ foo, bar ] \ No newline at end of file diff --git "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/6.Symbol2.js" "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/6.Symbol2.js" new file mode 100644 index 0000000..6e2c039 --- /dev/null +++ "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/6.Symbol2.js" @@ -0,0 +1,46 @@ +var validateId={};//用来验证身份证的; +validateId.age=1900; +console.log(validateId.age);//1900 + +validateId.age=1940; +console.log(validateId.age);//1900 + +//模块内部的 +validateId.demo1=Symbol();// AAXX111 demo1 +console.log(validateId.demo1);//Symbol() + +// 外部的 +validateId.demo1=1900; //demo1 +console.log(validateId.demo1);//1900 + +var aaa=Symbol("a");// //AAXX222 +var bbb=Symbol("a");// //AAXX333 生成的实例是唯一的,和其他任何实例都不相等,包括其他相同生成的实例 +console.log(aaa); +console.log(bbb); +console.log(aaa==bbb);//相当于NaN +console.log(Symbol()==Symbol());// + + +var age1=2; +var age2=2; +console.log(age1,age2); +console.log(age1==age2);//true + +//模块/插件里面的 +var age=Symbol("age");//AAXX666 +validateId[age]=222; +/* +* +* +* +* +* +* */ + +//other +// var age=Symbol("age");//AAXX777 +validateId[Symbol("age")]=333; + + +validateId.aaa=222; +validateId.bbb=222; diff --git "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/7\347\247\215\346\225\260\346\215\256\347\261\273\345\236\213\345\222\214\347\211\271\346\256\212\347\232\204Function.html" "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/7\347\247\215\346\225\260\346\215\256\347\261\273\345\236\213\345\222\214\347\211\271\346\256\212\347\232\204Function.html" deleted file mode 100644 index d672416..0000000 --- "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/7\347\247\215\346\225\260\346\215\256\347\261\273\345\236\213\345\222\214\347\211\271\346\256\212\347\232\204Function.html" +++ /dev/null @@ -1,46 +0,0 @@ - - - - - Title - - - - - - \ No newline at end of file diff --git "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/Boolean\347\261\273\345\236\213.html" "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/Boolean\347\261\273\345\236\213.html" deleted file mode 100644 index 7f48c5c..0000000 --- "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/Boolean\347\261\273\345\236\213.html" +++ /dev/null @@ -1,76 +0,0 @@ - - - - - Boolean - - - - - \ No newline at end of file diff --git "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/Number\347\261\273\345\236\213.html" "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/Number\347\261\273\345\236\213.html" deleted file mode 100644 index 4629a31..0000000 --- "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/Number\347\261\273\345\236\213.html" +++ /dev/null @@ -1,80 +0,0 @@ - - - - - Number - - - - - \ No newline at end of file diff --git "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/Object\347\261\273\345\236\213.html" "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/Object\347\261\273\345\236\213.html" deleted file mode 100644 index 8b4300c..0000000 --- "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/Object\347\261\273\345\236\213.html" +++ /dev/null @@ -1,80 +0,0 @@ - - - - - Title - - - - - \ No newline at end of file diff --git "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/README.MD" "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/README.MD" index d0b923e..5fcac0e 100644 --- "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/README.MD" +++ "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/README.MD" @@ -1,7 +1,7 @@ # 数据类型初识 -> JS的数据类型;通过typeof来检测,得到的数据类型有 String、number、boolean、null、undefined、Object(一切数据的基础); +JS的数据类型;通过typeof来检测,得到的数据类型有 `String`、`number`、`boolean`、`null`、`undefined`、`Object` (Object是一切数据的基础); - 一、[String](#one) - 二、[Number](#two) @@ -12,9 +12,13 @@ - 七、[Symbol](#footer) - 八、[练习题](#footer) -ECMAScript中有5种简单的数据类型,也称为基本数据类型;Undefined、Null、Boolean、Number、String。 +ECMAScript中有5种简单的数据类型,也称为基本数据类型; -一种复杂的数据类型,Object;(typeof检测还有一种特殊的Funtion); +`String`、`number`、`boolean`、`null`、`undefined` + +一种复杂数据类型,也称为引用数据类型(typeof检测还有一种特殊的Funtion) + +`Object` object本质是由一组无序的键值对组成的; @@ -76,7 +80,7 @@ length计算包括空格 //字符串长度 var strTest1="zhuanbang";//共9个 - var strTest2="朱安邦的JavaScript学习笔记";//共18 + var strTest2="朱邦邦的JavaScript学习笔记";//共18 console.log(strTest1.length);//9 console.log(strTest2.length);//18 //这只是个简单的判断,如果想用JavaScript判断或者获取所占的字节,就不能这么判断了,因为中文和英文字符所占的字节长度不同,所以要想获得中文字符的真正长度,就需要对输入的字符进行判断或过滤(可以unicode区间进行判断),如果符合中文字符,则使用不同的标准。 @@ -108,17 +112,18 @@ length计算包括空格 适用类型 Number/Boolean/String/Object 参数:number类型的数值基数;一般不需要写,仅作了解,如果需要按照2/8/16进制来转换,需要写; - - //toString()和String() - var testNum=1; - console.log(typeof testNum);//number - var testTarget1=toString(testNum); - var testTarget2=testNum.toString();//推荐用法 - var testTarget3=String(testNum); - //var testTarget4=testNum.String();//错误的用法 - console.log(typeof testTarget1);//string - console.log(typeof testTarget2);//string - console.log(typeof testTarget3);//string + +toString()和String() + + var testNum=1; + console.log(typeof testNum);//number + var testTarget1=toString(testNum); + var testTarget2=testNum.toString();//推荐用法 + var testTarget3=String(testNum); + //var testTarget4=testNum.String();//错误的用法 + console.log(typeof testTarget1);//string + console.log(typeof testTarget2);//string + console.log(typeof testTarget3);//string - String() @@ -141,7 +146,7 @@ length计算包括空格 var evalComputed=eval(evalVal); console.log(evalComputed,typeof evalComputed);//26 "number" -##### 如果把某个数据转化为字符串,可以有一个快捷的方式,就是把它与一个字符串""相加就可以了; +#####如果把某个数据转化为字符串,可以有一个快捷的方式,就是把它与一个字符串""相加就可以了; //+""用来转换字符串 @@ -161,7 +166,7 @@ length计算包括空格 某个数据并不仅限于Number类型;数组也可以的; - console.log([1,2,3,4]+"") + console.log([1,2,3,4]+"");//1,2,3,4 再看一组的加法(将字符串转为数字,注意浮点数的运算精度); @@ -269,11 +274,11 @@ length计算包括空格 console.log(-"10"+ 10);//了解下 -详细的解读 +类型转转 ##### Number() -> 一般用在数据类型的系统默认转换; +数据类型的系统默认转换; - Boolean转换为数值的时候 - true转为1; diff --git "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/README_FUNCRTION.md" "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/README_FUNCRTION.md" deleted file mode 100644 index 8625184..0000000 --- "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/README_FUNCRTION.md" +++ /dev/null @@ -1,344 +0,0 @@ - - -# 函数的初识 -- 知识点一、[初识函数](#one) -- 知识点二、[函数的定义](#two) -- 知识点三、[函数的调用](#three) -- 知识点四、[函数的方法](#four) -- 知识点五、[arguments对象](#five) -- 知识点六、[函数的参数](#six) -- 知识点七、[this关键字的指向](#seven) -- [面试题](#footer)s - - -### 一、初识函数 - -- 函数的意义,高内聚,低耦合,复用与多态;可以通过函数封装任意多条语句,而且可以在任何地方,任何时候进行调用,使用非常的灵活; - - // 基本的语法 - function functionName(argument1,argument2){ - /*一堆的代码*/ - } - //下面是函数的一个实例, - function diff(a,b){ - console.log(a-b); - } - diff(10,5);//输出5 - diff(20,2);//输出18 - - > 函数可以通过它的函数名来调用,后面加(),就可以执行了;上面的diff分别输出的是5和18;a和b是函数的两个参数,最终的结果是打印在控制台的; - -- 函数还有一个属性,就是可以return;ECMA中函数在定义的时候,不要求函数是否返回一个值,但是每个函数都有return的权利;任何函数在任何时候都可以通过return语句返回的值来实现把值返回给外部变量; - - function diff(a,b){ - return a-b; - } - var diffNumber=diff(10,5); - console.log(diffNumber);//diffNumber用来接收函数的返回值,如果return了一个值,但是外部没有变量去接收它,就失去了return的意义了; - -- 函数的返回值只能通过return来返回,除了return以外,没有任何声明可以表示返回值 - - > return的特性:无论return在哪里,只要有执行了return同一条的代码后,函数立即停止,并且立即退出,因此位于return语句之后的人和代码都永远不会执行; - - function diff(a,b){ - return a-b; - console.log("测试的代码");//这条语句,永远不会执行; - } - var diffNumber=diff(10,5); - console.log(diffNumber); - - > 一个函数可以多条return; - - function diff(a,b){ - if(a>b){ - return a-b; - }else{ - return b-a; - } - } - var diffNumber1=diff(10,5); - var diffNumber2=diff(5,10); - console.log(diffNumber1);//5 - console.log(diffNumber2);//5 - - 这个函数diff用来计算两个数之间才差值;如果a比b小,则用b-a;否则a-b;函数中用if分为两个分支,分别具有自己的return语句来执行正确的计算逻辑; - -- return语句可以不带任何返回值,这种情况下,函数返回值是undefined;这种写法,一般用在需要提前停止函数又不需要返回值的情况; - - function testReturn (arg){ - console.log("arg的值是:"+arg); - if(arg===""){return}//如果传的值是空字符串,参数不对, 没必要处理了,直接return停止函数了,可以优化性能;; - console.log("一些处理参数的代码") - } - testReturn(""); - -- ** return的总结 ** - - 1、任何一个函数都有return关键字,用来导出函数内部的值;(闭包的思路); - - 2、return是非必须的,可以写也可以不写;如果不写,或者return后面没有值,函数的返回结果都是undefined; - - 3、无论return写在哪里,只要函数执行到了return这条代码了,执行完以后,立即停止执行并且跳出函数;return下面的代码将不会执行; - - 4、推荐的做法是要么让函数始终都返回一个值,要么永远不要返回值,;否则函数有时候有返回值,有时候没有返回值,调试起来不方便; - - -**[↑ 返回目录](#zero)** - - -### 一、函数的定义 - -- function语句的定义方法 -- 函数直接量的定义方法 -- 构造函数的定义方法 - - ``` - //function语句的定义方法 - function test1(arg1,arg2){ - console.log("function语句的定义方法:",arg1+arg2); - return; - } - - //函数直接量的定义方法 - var test2 = function(arg1,arg2){ - console.log("函数直接量的定义方法:",arg1+arg2); - return; - } - - //构造函数的定义方法 - var test3 = new Function("arg1","arg2","console.log('构造函数的定义方法:',arg1+arg2)"); - - ``` - - -**[↑ 返回目录](#zero)** - - -### 三、函数的调用 - -- 直接调用: 函数名(实参列表) - - ``` - function test1(arg1,arg2){ - console.log("function语句的定义方法:",arg1+arg2); - return; - } - - //直接调用 - test1(1,2);//function语句的定义方法: 3 - - ``` - -- 在链接中调用 - - ``` - - - - - - ``` - -- 在事件中调用 - - ``` - - - - - - ``` - -- 递归调用 - - > 在函数内部调用函数自身 - - - - - -**[↑ 返回目录](#zero)** - - -### 四、函数的方法 - -- call:将函数作为对象的方法来调用,将参数传递给该方法,在后面this关键字时候详细总结 -- apply:将函数作为对象的方法来调用,将参数以数组的形式传递给该方法,在后面this关键字时候详细总结 -- toString:返回函数的字符串表示 - - ``` - var oBtn1=document.getElementById("btn1"); - oBtn1.onclick=function(){ - console.log(test1.toString()); - }; - - function test1(){ - console.log("最开始的调用方法"); - } - - ``` - - -**[↑ 返回目录](#zero)** - - -### 五、arguments对象 - -- 功能:存放实参的参数列表 - ``` - test1(1,2);//[1,2] - test1(1,2,3,4,5);//[1, 2, 3, 4, 5] - function test1(){ - console.log(arguments); - } - - ``` - argutments在普通模式里,可以在函数内部修改函数的值,但是不建议那么做;这点在严格模式下也有限制 - - 在严格模式,函数内部不能修改argument的值,即使修改了,操作也是无效的; - - 其次重写arguments值会导致语法错误,代码不执行; - -- 特性: - - 仅能在函数体内使用 - ``` - test1(1,2);//[1,2] - function test1(){ - console.log(arguments); - } - console.log(arguments);//Uncaught ReferenceError: arguments is not defined - - ``` - - 带有下标属性,但是并非数组 - ``` - test1(1,2);//1 2 undefined - function test1(){ - console.log(arguments[0],arguments[1],arguments[2]); - } - - ``` - - 函数声明时自动初始化 -- 属性 - - length 获取函数实参的长度 - - test1(1,2,3,4,5);// 输出5 - function test1(){ - console.log(arguments.length); - } - - - callee 返回当前正在指向的函数 - - test1(1,2,3,4,5);// 输出函数本身 - function test1(){ - console.log(arguments.callee); - } - - - caller 返回调用当前正在执行函数的函数名;在chrome里是没有的;尽量不要用arguments的这个属性; - - 在chrome里的callee是arguments.callee.caller - - 对于函数来说,caller 属性只有在函数执行时才有定义。 如果函数是由 Javascript 程序的顶层调用的,那么 caller 包含的就是 null 。 - - - - ``` - function callerDemo() { - if (arguments.callee.caller) { - var a = callerDemo.caller.toString(); - console.log(a); - } else { - console.log("this is a top function"); - } - } - function handleCaller() { - callerDemo(); - } - handleCaller(); - function calleeDemo() { - console.log(arguments.callee); - } - calleeDemo(); - - ``` - - > 函数的参数是函数的灵魂;ECMA中的函数不在乎传来多少个参数,也不在乎你传进来的是什么类型的,即使你定义的函数值接受两个参数,在调用的时候未必严格的传进两个实参,你传一个,三个,不传都是没有问题的[这就是函数的多态]; - - - > 原理是因为ECMA是把函数用在内部用一个”数组”来表示的,函数接受到的始终都是这个数组,并不关心这个”数组”是否包含参数,已经包含的都是什么参数,可以通过arguments[index]这种的方式来访问,也可以通过arguments.length的值来确定传进来了多个参数; - - - function testArgument(){ - console.log("hello argument[0]:"+arguments[0]+" and argument[1]:"+arguments[1]); - } - testArgument("1","2");//hello argument[0]:1 and argument[1]:2 - testArgument("1");//hello argument[0]:1 and argument[1]:undefined - testArgument();//hello argument[0]:undefined and argument[1]:undefined - -函数的一个特点,形参只是提供了操作的便利,但并不是必须的;函数的定义和调用与参数是没有关系的,只有在函数内部引用了形参才与实参个数和值有关系;如果函数只是定义了,但是没有执行,那就是脱裤子放屁了;因为对程序不会有任何意义; - - function sum(a,b){ - if(arguments.length===2){ - console.log("第1个参数和第二个参数的和是:"+a+b); - }else if(arguments.length===1){ - console.log("block,只传了一个参数 "+a+",让我如何相加") - }else{ - console.log("我拒绝运算!") - } - } - sum(10,8);//第1个参数和第二个参数的和是:108 - sum(10);//block,只传了一个参数 10,让我如何相加 - sum();//我拒绝运算! - -上面就牵扯到了函数的多态,根据不同的参数来做不同的事情; - - - -**[↑ 返回目录](#zero)** - - -### 六、函数的参数 - -- 参数类型; - 1. 形参,定义函数时使用的参数,接收调用该函数时传递的参数 - 2. 实参,调用函数时传递给函数的实际参数; -- 特性; - 1. 参数个数没有限制;(实参<形参,多余形参==undefined;实参>形参,多余实参被忽略;) - 2. 参数的数据类型没有限制,通过arguments对象访问参数数组; - 3. 参数始终按值传递 - - a) 基本类型-传值; - - b) 引用类型-地址; - - -**[↑ 返回目录](#zero)** - - - -### 七、this关键字的指向 - -- this,指向当前操作对象; -- callee,指向参数集合所属函数 -- prototype,指向函数附带的原型对象; -- constructor,指向创建该对象的构造函数; - -### 面试题 \ No newline at end of file diff --git "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/String\347\261\273\345\236\213.html" "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/String\347\261\273\345\236\213.html" deleted file mode 100644 index a6dbdb3..0000000 --- "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/String\347\261\273\345\236\213.html" +++ /dev/null @@ -1,61 +0,0 @@ - - - - - Title - - - - - - \ No newline at end of file diff --git "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/Symbol.html" "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/Symbol.html" deleted file mode 100644 index 2ca68f9..0000000 --- "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/Symbol.html" +++ /dev/null @@ -1,59 +0,0 @@ - - - - - Title - - - - - - \ No newline at end of file diff --git "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/Symbol\347\261\273\345\236\213.html" "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/Symbol\347\261\273\345\236\213.html" deleted file mode 100644 index fe2081a..0000000 --- "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/Symbol\347\261\273\345\236\213.html" +++ /dev/null @@ -1,49 +0,0 @@ - - - - - Title - - - - - \ No newline at end of file diff --git "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/null\345\222\214undefined.html" "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/null\345\222\214undefined.html" deleted file mode 100644 index d9649ca..0000000 --- "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/null\345\222\214undefined.html" +++ /dev/null @@ -1,88 +0,0 @@ - - - - - NUll - - - -
asdhasdasl
- - - \ No newline at end of file diff --git "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/\346\225\260\346\215\256\345\202\250\345\255\230\345\216\237\347\220\206.html" "b/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/\346\225\260\346\215\256\345\202\250\345\255\230\345\216\237\347\220\206.html" deleted file mode 100644 index e185deb..0000000 --- "a/\346\225\260\346\215\256\347\261\273\345\236\213\345\210\235\350\257\206/\346\225\260\346\215\256\345\202\250\345\255\230\345\216\237\347\220\206.html" +++ /dev/null @@ -1,84 +0,0 @@ - - - - - Title - - - - - \ No newline at end of file diff --git "a/\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217/3.\345\205\203\345\255\227\347\254\246\347\232\204\345\272\224\347\224\250.md" "b/\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217/3.\345\205\203\345\255\227\347\254\246\347\232\204\345\272\224\347\224\250.md" index 4026ecb..c2d83bc 100644 --- "a/\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217/3.\345\205\203\345\255\227\347\254\246\347\232\204\345\272\224\347\224\250.md" +++ "b/\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217/3.\345\205\203\345\255\227\347\254\246\347\232\204\345\272\224\347\224\250.md" @@ -146,3 +146,41 @@ console.log("test 34222819000428111x",reg2.test("34222819000428111x"));//true console.log("test 34222819000428111X",reg2.exec("34222819000428111X"));//["34222819000428111X", "34", "2228", "1900", "04", "28", "11", "1", "X", index: 0, input: "34222819000428111X"] +- 6.匹配整数或者0-8位小数; + + const test0 = "01";//true + const test1 = "1.";//true + const test2 = "5";//true + const test3 = "999999999.34546782";//true + const test4 = "5.10";//true + + const test5 = "123.45678.908";//false + const test6 = "1s34.5678";//false + const test7 = "1s34.3454678332";//false + const test8 = "123.45678.";//false + +代码如下 + + const reg=/^\d{1,}\.?\d{0,8}$/; + + const test0 = "01";//true + const test1 = "1.";//true + const test2 = "5";//true + const test3 = "999999999.34546782";//true + const test4 = "5.10";//true + + const test5 = "123.45678.908";//false + const test6 = "1s34.5678";//false + const test7 = "1s34.3454678332";//false + const test8 = "123.45678.";//false + + console.log(reg.test(test0)); + console.log(reg.test(test1)); + console.log(reg.test(test2)); + console.log(reg.test(test3)); + console.log(reg.test(test4)); + console.log("----"); + console.log(reg.test(test5)); + console.log(reg.test(test6)); + console.log(reg.test(test7)); + console.log(reg.test(test8)); diff --git "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/%\350\277\220\347\256\227\347\254\246.html" "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/%\350\277\220\347\256\227\347\254\246.html" deleted file mode 100644 index 73a691c..0000000 --- "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/%\350\277\220\347\256\227\347\254\246.html" +++ /dev/null @@ -1,15 +0,0 @@ - - - - - Title - - - - - \ No newline at end of file diff --git "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/1.%\350\277\220\347\256\227\347\254\246.js" "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/1.%\350\277\220\347\256\227\347\254\246.js" new file mode 100644 index 0000000..0cecf01 --- /dev/null +++ "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/1.%\350\277\220\347\256\227\347\254\246.js" @@ -0,0 +1,4 @@ +var times=123453;//求多少分,多少秒; +var targetTime=parseInt(times/60)+"分"+times%60+"秒"; +console.log(targetTime); +//思考:等于多少天,多少小时,多少分,多少秒 \ No newline at end of file diff --git "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/2.\347\256\227\346\234\257\350\277\220\347\256\227\347\254\246.js" "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/2.\347\256\227\346\234\257\350\277\220\347\256\227\347\254\246.js" new file mode 100644 index 0000000..aa09bbc --- /dev/null +++ "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/2.\347\256\227\346\234\257\350\277\220\347\256\227\347\254\246.js" @@ -0,0 +1,35 @@ +//连接字符串,把数值转换为字符串 +var strOne="abc", + strTwo="xyz"; +console.log(strOne+strTwo);//abcxyz +console.log(strOne+123);//abc123 + +//多次运算 +var testOne="字符串"; +console.log(testOne+2+5);//字符串25 +console.log(testOne+(2+5));//字符串7 + +var strEmpty=""; +var testNum=222; +var targetData=strEmpty+testNum; +console.log(typeof testNum);//number +console.log(typeof targetData);//string + +var num=0; +num=num+2; +num=num*3; +num=num/2; +num++; +num--; +num+=1; +num-=2; +num*=3; +num/=2; +num%3; +console.log(num); + +//操作数类型和结果类型 +console.log("5"+"3");//53 +console.log("5"-"3");//2 +console.log("5"*"3");//15 +console.log("15"/"3");//5 \ No newline at end of file diff --git "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/3.\345\205\263\347\263\273\350\277\220\347\256\227\347\254\246.js" "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/3.\345\205\263\347\263\273\350\277\220\347\256\227\347\254\246.js" new file mode 100644 index 0000000..cdbdb5e --- /dev/null +++ "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/3.\345\205\263\347\263\273\350\277\220\347\256\227\347\254\246.js" @@ -0,0 +1,14 @@ +console.log("20">"100000");//true +console.log(null>2);//false +console.log(NaN>2);//false + +//关系操作符 +var testNum=3; +console.log("下面是关系操作符"); +console.log(testNum==1); +console.log(testNum===1); +console.log(testNum!=1); +console.log(testNum>1); +console.log(testNum>=1); +console.log(testNum<1); +console.log(testNum<=1); \ No newline at end of file diff --git "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/4.\347\233\270\347\255\211\350\277\220\347\256\227\347\254\246.js" "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/4.\347\233\270\347\255\211\350\277\220\347\256\227\347\254\246.js" new file mode 100644 index 0000000..201518e --- /dev/null +++ "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/4.\347\233\270\347\255\211\350\277\220\347\256\227\347\254\246.js" @@ -0,0 +1,33 @@ +console.log(null==0);//false +console.log(false==0);//true +console.log({}=="");//true + +//转换分析1 +console.log("zhuanbang"?true:false);//true,因为非空的字符串是一个真值; + +//转换分析2 +console.log("zhuanbang"==true);//这个时候输出什么呢?在分析一里非空字符串是一个true,那么非空字符串==true吗? + +//转换分析3 +console.log("zhuanbang"==false);//如果上面的的返回不是true,那么这个会返回true吗? + +/*转换分析2-解析 +* 1、右边的布尔值会转为数字,true->1;"zhuanbang"==1 +* 2、左边的字符串会转为数字,"zhuanbang"因为里面有字母,所以转换为NaN;NaN==1 +* 3、NaN和任何数据都不想等,包括自己,所以结果是false,并不是true; +* */ + +/* +* 1、右边的布尔值会转为数字,false->0;"zhuanbang"==0 +* 2、左边的字符串会转为数字,"zhuanbang"因为里面有字母,所以转换为NaN;NaN==0 +* 3、NaN和任何数据都不想等,包括自己,所以结果是false,结果也不是true +* */ + + +//相同的小分析 +console.log("zhuanbang"===true); +console.log("1"===1); +console.log("zhuanbang"==="zhuanbang"); +var person1={name:"zhuanbang"}; +var person2={name:"zhuanbang"}; +console.log(person1===person2);//false, 是不同的引用地址;在堆内存中储存是不一样的; \ No newline at end of file diff --git "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/5.\351\200\273\350\276\221\350\277\220\347\256\227\347\254\246.js" "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/5.\351\200\273\350\276\221\350\277\220\347\256\227\347\254\246.js" new file mode 100644 index 0000000..6b13f44 --- /dev/null +++ "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/5.\351\200\273\350\276\221\350\277\220\347\256\227\347\254\246.js" @@ -0,0 +1,10 @@ +console.log(!true);//false +console.log(true && false);//false +console.log(true || false);//true + +var a="", + b="B有值"; +var result=a||"A的值是假的", + result2=b||"B的值是假的"; +console.log(result); +console.log(result2); \ No newline at end of file diff --git "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/6.\344\275\215\350\277\220\347\256\227\347\254\246.js" "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/6.\344\275\215\350\277\220\347\256\227\347\254\246.js" new file mode 100644 index 0000000..379eebc --- /dev/null +++ "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/6.\344\275\215\350\277\220\347\256\227\347\254\246.js" @@ -0,0 +1,6 @@ +console.log('5 & 1:', (5 & 1)); +console.log('5 | 1:', (5 | 1)); +console.log('~ 5:', (~5)); +console.log('5 ^ 1:', (5 ^ 1)); +console.log('5 << 1:', (5 << 1)); +console.log('5 >> 1:', (5 >> 1)); \ No newline at end of file diff --git "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/7.\344\270\211\345\205\203\350\277\220\347\256\227\347\254\246.js" "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/7.\344\270\211\345\205\203\350\277\220\347\256\227\347\254\246.js" new file mode 100644 index 0000000..f50faea --- /dev/null +++ "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/7.\344\270\211\345\205\203\350\277\220\347\256\227\347\254\246.js" @@ -0,0 +1,14 @@ +function trueOrFalse(val) { + return val?console.log(val+" is true"):console.log(val+" is false") +} +trueOrFalse(null); +trueOrFalse(undefined); +trueOrFalse(0); +trueOrFalse(NaN); +trueOrFalse(-0);//0===-0 +trueOrFalse(false); +trueOrFalse(""); +trueOrFalse(" "); +trueOrFalse({}); +trueOrFalse([]); +trueOrFalse(1); \ No newline at end of file diff --git "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/README.MD" "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/README.MD" index ecb0dd6..f2d7082 100644 --- "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/README.MD" +++ "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/README.MD" @@ -4,7 +4,7 @@ 这个就是一个表达式,把等号右边的字符串,赋值到左边myName这个变量名上;表达式在各个类型里会介绍,这里主要总结运算符; -大多数的运算符是有+-==这种标点符号来表现,但是也有一些运算符是由关键字表示的,比如delete和instanceof,不过无论标点符号表示的运算符还是关键字表示的运算符,都是合法的运算符; +大多数的运算符是有`+`、 `-` 、`==`这种标点符号来表现,但是也有一些运算符是由关键字表示的,比如delete和instanceof,不过无论标点符号表示的运算符还是关键字表示的运算符,都是合法的运算符; # 运算符; @@ -96,27 +96,27 @@ ECMAScript里用于操作数据值的运算符也叫操作符,只是叫法不 ##### 赋值操作符 -**=**:赋值 +`=`:赋值 var a=10; -**+=**:加赋值 +`+=`:加赋值 x+=y // x=x+y; -**-=**:减赋值 +`-=`:减赋值 x-=y // x=x-y; -***=**:乘赋值 +`*=`:乘赋值 x*=y // x=x*y; -**/=**:除赋值 +`/=`:除赋值 x/=y // x=x/y; -**%=**:取余赋值 +`%=`:取余赋值 x%=y // x=x%y; diff --git "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/\344\270\211\345\205\203\350\277\220\347\256\227\347\254\246.html" "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/\344\270\211\345\205\203\350\277\220\347\256\227\347\254\246.html" deleted file mode 100644 index de13fdc..0000000 --- "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/\344\270\211\345\205\203\350\277\220\347\256\227\347\254\246.html" +++ /dev/null @@ -1,25 +0,0 @@ - - - - - Title - - - - - \ No newline at end of file diff --git "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/\344\275\215\350\277\220\347\256\227\347\254\246.html" "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/\344\275\215\350\277\220\347\256\227\347\254\246.html" deleted file mode 100644 index 1696865..0000000 --- "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/\344\275\215\350\277\220\347\256\227\347\254\246.html" +++ /dev/null @@ -1,17 +0,0 @@ - - - - - Title - - - - - \ No newline at end of file diff --git "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/\345\205\263\347\263\273\350\277\220\347\256\227\347\254\246.html" "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/\345\205\263\347\263\273\350\277\220\347\256\227\347\254\246.html" deleted file mode 100644 index 18796f6..0000000 --- "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/\345\205\263\347\263\273\350\277\220\347\256\227\347\254\246.html" +++ /dev/null @@ -1,25 +0,0 @@ - - - - - Title - - - - - \ No newline at end of file diff --git "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/\347\233\270\347\255\211\350\277\220\347\256\227\347\254\246.html" "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/\347\233\270\347\255\211\350\277\220\347\256\227\347\254\246.html" deleted file mode 100644 index 5bb24cb..0000000 --- "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/\347\233\270\347\255\211\350\277\220\347\256\227\347\254\246.html" +++ /dev/null @@ -1,45 +0,0 @@ - - - - - Title - - - - - \ No newline at end of file diff --git "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/\347\256\227\346\234\257\350\277\220\347\256\227\347\254\246.html" "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/\347\256\227\346\234\257\350\277\220\347\256\227\347\254\246.html" deleted file mode 100644 index 22f6abb..0000000 --- "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/\347\256\227\346\234\257\350\277\220\347\256\227\347\254\246.html" +++ /dev/null @@ -1,49 +0,0 @@ - - - - - Title - - - - - \ No newline at end of file diff --git "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/\351\200\273\350\276\221\350\277\220\347\256\227\347\254\246.html" "b/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/\351\200\273\350\276\221\350\277\220\347\256\227\347\254\246.html" deleted file mode 100644 index 1f2e766..0000000 --- "a/\350\241\250\350\276\276\345\274\217\345\222\214\350\277\220\347\256\227\347\254\246/\351\200\273\350\276\221\350\277\220\347\256\227\347\254\246.html" +++ /dev/null @@ -1,21 +0,0 @@ - - - - - Title - - - - - \ No newline at end of file