1010在javascript里 声明变量简写为 var ;通过var name 就可以声明一个变量了;
1111注意变量的声明和定义是两回事;
1212
13- - var name ->变量的声明
14- - name="朱安邦" ->变量的定义
15- - var name=”朱安邦” ->变量的声明加定义;
13+ ``` $xslt
14+ var name; //变量的声明
15+ name="朱邦邦"; //变量的定义
16+ var name="朱邦邦"; //变量的声明加定义
17+ ```
1618
17- > var name=”朱安邦 ”;其实是实现两步;
19+ > var name=”朱邦邦 ”;其实是实现两步;
1820> 第一步 var name;先声明一个name的变量;
19- > 第二步 name=”朱安邦 ” 创建数据"朱安邦 "这个字符串,并且把字符串"朱安邦 "这条数据赋值给name这个变量;在定义(赋值)变量的name值;
21+ > 第二步 name=”朱邦邦 ” 创建数据"朱邦邦 "这个字符串,并且把字符串"朱邦邦 "这条数据赋值给name这个变量;在定义(赋值)变量的name值;
2022>
2123> 这个时候name的类型就是所代表值的类型;可以通过typeof来检测;通过检测可以知道这个变量所代表的值是一个字符串类型的数据;
2224
23- var name="朱安邦",
24- gender;
25- console.log(name,typeof name); //朱安邦 string
26- console.log(gender,typeof gender); //undefined "undefined"
25+ ``` $xslt
26+ var name="朱邦邦",
27+ gender;
28+ console.log(name,typeof name); //朱邦邦 string
29+ console.log(gender,typeof gender); //undefined "undefined"
30+ ```
2731
2832虽然关键字var不是必须的,但是最好每次声明一个新变量都加上;
2933
4650 - 关于关键字和保留字,这个可以拿生活中的现象举例子,大人给小孩起名字的时候,小孩的名字一定不能和他父亲母亲的名字一样;当然也不能和爷爷,奶奶,外公,外婆,舅舅,姑姑等等这些名字一样;这个就是现实中约定俗成的规则;
4751 - 在JS中,也有些单词是有特殊意义的,或者是为了以后语言升级做准备的;而这些单词就不能作为变量名;比如前面接触的typeof,function;这样的单词就不能作为变量名;
4852
49- - 4、变量区分大小写,test和Test是不一样的,必须严格一样,才算是一个变量的;(在javascript里,onclick必须要写出onclick,不能写成onClick ;)
53+ - 4、变量区分大小写,test和Test是不一样的,必须严格一样,才算是一个变量的;(在javascript里,` onclick ` 必须要写出 ` onclick ` ,不能写成 ` onClick ` ;)
5054
5155##### 变量命名的优化方法(推荐遵守的,非强制);
5256
8084- Class名:用”-”连接符的方法;class=”header-nav” 比如这样的;
8185- JS变量名:myRoomDoorKey;小驼峰
8286- data-diy_attr 自定义属性;
83- - j-trigger-target JS中需要用的雷类名
87+ - j-trigger-target JS中需要用的类名
8488- jQuery对象名:$myKey;小驼峰前面加$;这种方法是从匈牙利+驼驼峰总结出来的;其实真实项目中,很少有匈牙利命名法的;匈牙利命名法见过最多的都是出现在写DEMO的时候用;
85- - 除非特别难起的变量名,否则不要用中文拼音做变量名;不要听信某些教材和视频中说的严禁用拼音命名的话,有的甚至还把linux创始人林纳斯的代码风范拿出来说事。其实那些并没有什么软用;开始就和大家说了变量是用来区别不同数据的;而优化变量名的意义在于能够快速识别这个变量名所代表的数据;比如你要记录游戏场景下的角色出血值;你还要想半天单词,或者找翻译,然后起出来的变量名,自己下次看到或者别人看到的时候还要去翻译或者思考下;这种情况下,为什么不直接用 chuxue这种的方式呢?只需要后面加一行注视说明什么意思就可以了;我个人是很反感为了遵守优化规则而脱裤子放屁的方式的;曾经在项目中遇到过一个真实的事;某个变量看了半天不知道到底代表什么意思(因为当时有接触到差不多10种的用户相关类型的金额数),查了翻译也没有查到;后来问了下,才知道那个坑货把单词给拼错了两个字母;
89+ - 除非特别难起的变量名,否则不要用中文拼音做变量名,但是遇到难起的变量名,使用中文也别有负担,但是禁止中英文混搭;
90+ - 注释可以辅助整理思路;
8691
87- <div class="page-var-demo" id="page-var-demo">
88- <!--class="page-var-demo"用来设置样式;id="page-var-demo"用给JS用;-->
89- <div class="btns-groulp">
90- <a href="javascript:;" class="xxxx xxxxx j-open-demo" data-demo_id="456465465">打开演示窗口</a>
91- <!--j-open-demo 这些是给JS用来触发某些事件用的,data-demo_id用来储存需要的值的-->
92- <a href="javascript:;" class="xxxx xxxxx j-set-demo">设置演示数据</a>
93- </div>
94- </div>
92+ 不要听信某些教材和视频中说的严禁用拼音命名的话,有的甚至还把linux创始人林纳斯的代码风范拿出来说事。其实那些并没有什么软用;开始就和大家说了变量是用来区别不同数据的;而优化变量名的意义在于能够快速识别这个变量名所代表的数据;
93+
94+ 比如你要记录游戏场景下的角色出血值;你还要想半天单词,或者找翻译,然后起出来的变量名,自己下次看到或者别人看到的时候还要去翻译或者思考下;这种情况下,为什么不直接用 chuxue这种的方式呢?只需要后面加一行注视说明什么意思就可以了;
95+
96+ 很反感为了遵守优化规则而脱裤子放屁的方式的;曾经在项目中遇到过一个真实的事;某个变量看了半天不知道到底代表什么意思(因为当时有接触到差不多10种的用户相关类型的金额数),查了翻译也没有查到;后来问了下,才知道那个坑货把单词给拼错了两个字母;
97+
98+ ``` $xslt
99+ <div class="page-var-demo" id="page-var-demo">
100+ <!--class="page-var-demo"用来设置样式;id="page-var-demo"用给JS用;-->
101+ <div class="btns-groulp">
102+ <a href="javascript:;" class="xxxx xxxxx j-open-demo" data-demo_id="456465465">打开演示窗口</a>
103+ <!--j-open-demo 这些是给JS用来触发某些事件用的,data-demo_id用来储存需要的值的-->
104+ <a href="javascript:;" class="xxxx xxxxx j-set-demo">设置演示数据</a>
105+ </div>
106+ </div>
107+ ```
95108
96109** [ ↑ 返回目录] ( #zero ) **
97110
101114
102115变量通过var来声明;
103116
104- 有些要避免的,否则后面写代码的时候可能会把自己给坑了 ;
117+ 下面是要避免的,否则写代码的时候可能会把自己给坑了 ;
105118
106119- 重复声明;
107120- 不声明直接赋值
110123> 推荐:先声明,后定义;
111124
112125- 需要读写的变量,读写前,一定要声明;
113- - 需要运算的变量,运算器 ,一定要赋值;
126+ - 需要运算的变量,运算前 ,一定要赋值;
114127- 书写的时候,推荐把变量名放在页面的上面(上部分)去声明+定义;这样不仅可以放心大胆的用,而且可以方便查找变量;
115128- 在任何情况下声明变量都要用var先声明;在使用一个变量之前应当先声明,变量是使用关键字var来声明的;
116- var a=1;
117- function test(){
118- var b=c=2;//这时候会隐式声明全局变量;
119- }
120- test();
121- console.log(a,c)
122129
123- > 这种是非常不好的写法;不要写var a=b=c=1;这种声明;上面代码中c就会被隐式声明为全局变量;下面这种写法是可以的
130+ ``` $xslt
131+ var a=1;
132+ function test(){
133+ var b=c=2;//这时候会隐式声明全局变量;
134+ }
135+ test();
136+ console.log(a,c)
137+ ```
124138
125- var a= 1,c;
126- function test(){
127- var b=c=2;
128- }
129- test();
130- console.log(a,c)
139+ 上面是非常不好的写法;不要写 ` var b=c=2 ` 这种声明;上面代码中c就会被隐式声明为全局变量;
131140
132- > 因为开始c已经声明了;后面是给c赋值;
141+ 下面这种写法是可以的
133142
134- 推荐下面这种写法;
143+ ``` $xslt
144+ var a= 1,c;
145+ function test(){
146+ var b=c=2;
147+ }
148+ test();
149+ console.log(a,c)
150+ ```
151+
152+ 因为开始c已经声明了,后面只是给c赋值;
153+
154+ 多个变量声明赋值时候,同一类的变量推荐下面这种写法;
135155
136156 var name="zhuanbang",
137157 age=26,
138158 height="174cm";
139159
140160这样既可以简洁,又保证可读性;
141- 注意:任何变量赋值前都需要声明变量,不要隐式创建全局变量;
161+
162+ ** 注意:任何变量赋值前都需要声明变量,不要隐式创建全局变量;**
142163
143164##### 重复声明和遗漏声明的区别:
144- 在javascript里使用var重复声明是合法而且不会有任何事情的,如果重复声明带有初始化的值,那么就和一条简单的赋值语句没有什么两样,但是如果你忘记声明了,视图读取一个没有声明的变量的值,javascript可能会报错;在严格模式中,给一个没有声明的变量赋值也是会报错的;非严格模式下虽然不会报错,但是不要抱着侥幸的心理;这是一个不好的习惯,会造成很多bug;建议始终使用var来声明变量;
165+
166+ 在javascript里使用 ` var ` 重复声明是合法而且不会有任何事情的,如果重复声明带有初始化的值,那么就和一条简单的赋值语句没有什么两样,但是如果你忘记声明了,试图读取一个没有声明的变量的值,javascript可能会报错;
167+
168+ 在严格模式中,给一个没有声明的变量赋值也是会报错的;非严格模式下虽然不会报错,但是不要抱着侥幸的心理;这是一个不好的习惯,建议始终使用var来声明变量;
145169
146170ES6扩展了2种声明方法;
147171
@@ -158,8 +182,27 @@ ES6扩展了2种声明方法;
158182
159183常量不可以通过赋值改变其值,也不可以在脚本运行时重新声明。它必须被初始化为某个值。
160184
185+ ``` $xslt
186+ const myName="zhu";
187+ let age=2;
188+ age =22;
189+ // myName=4;//Error
190+ console.log(age);
191+ ```
192+
161193常量的作用域规则与 let 块级作用域变量相同。若省略const关键字,则该标识符将被视为变量。
162194
195+ ``` $xslt
196+ if(true){
197+ var a=2;
198+ }
199+ if(true){
200+ let b=3;
201+ }
202+ console.log(a);
203+ console.log(b);//b is not defined
204+ ```
205+
163206在同一作用域中,不能使用与变量名或函数名相同的名字来命名常量。
164207
165208** [ ↑ 返回目录] ( #zero ) **
@@ -186,18 +229,20 @@ ES6扩展了2种声明方法;
186229ECMAScript规定变量包含两种不同数据类型的值,基本类型值和引用类型值;在给变量赋值的时候,解析器必须要明确这个值是基本类型还是引用类型值,因为他们的赋值方式是不同的;string/number/boolean/null/undefined都是基本数据类型;因此可以操作保存在变量中是实际值,此时变量储存的是实际的值;而引用类型的值是保存在内存中的,此时变量储存的是内存的地址,而不是真实的值;而我们操作引用类型的变量时,实际操作的是它引用地址对应的对象,而不是直接操作对象的;
187230基本类型和引用类型的操作原理
188231
189- var number1= 1,
190- number2=number1;
191- number1=2;//改变了number1的值
192- console.log(number1);//2
193- console.log(number2);//1
194- console.log(number1===number2);//false
195-
196- var obj1={name:"zhu"},
197- obj2=obj1;
198- obj1.name="zhuanbang";
199- console.log(obj1.name,obj2.name);//zhuanbang,zhuanbang
200- console.log(obj1.name===obj2.name);//true
232+ ``` $xslt
233+ var number1= 1,
234+ number2=number1;
235+ number1=2;//改变了number1的值
236+ console.log(number1);//2
237+ console.log(number2);//1
238+ console.log(number1===number2);//false
239+
240+ var obj1={name:"zhu"},
241+ obj2=obj1;
242+ obj1.name="zhuanbang";
243+ console.log(obj1.name,obj2.name);//zhuanbang,zhuanbang
244+ console.log(obj1.name===obj2.name);//true
245+ ```
201246
202247![ ] ( https://raw.githubusercontent.com/Broszhu/zhuanbang-javascript-notes/master/img/path1/dataType.png )
203248
@@ -264,33 +309,39 @@ ECMAScript规定变量包含两种不同数据类型的值,基本类型值和
264309###### 注释
265310javascript的注释。单行注释是"//注释文字",多行注释是/* 注释文字* /
266311
267- //注释文字
312+ ``` $xslt
313+ //注释文字
268314
269- /*
270- * 多行注释1
271- * 多行注释2
272- * /
315+ /*
316+ * 多行注释1
317+ * 多行注释2
318+ * /
319+ ```
273320
274321##### 语法建议:
275322
323+ ``` $xslt
276324//bad
277325var a=2 //没有分号,也是可以的,但是不推荐这么做;压缩的时候可能会出错; 理论上加分号性能会更好,浏览器不必花时间判断是否要加分号了(无论加不加分号,浏览器解析的时候会判断的,如果需要加的地方没有加,浏览器解析时候会加上去之后再解析)
278326
279327//good
280328var b=3;
329+ ```
281330
282331##### 不建议使用var a=b=c=1;这种的写法;
283332
284333if-else 推荐加上{};
285334
286- //bad
287- if(true)
288- console.log("bad");//有效,但是容易出错,不要使用;
335+ ``` $xslt
336+ //bad
337+ if(true)
338+ console.log("bad");//有效,但是容易出错,不要使用;
289339
290- //good
291- if(true){
292- console.log("good");//推荐使用,可以降低修改代码时出错的几率,可以让代码的意图更明确;
293- }
340+ //good
341+ if(true){
342+ console.log("good");//推荐使用,可以降低修改代码时出错的几率,可以让代码的意图更明确;
343+ }
344+ ```
294345
295346分号很多地方是可选的,推荐除了{}外都给加上;语句也可以换行的,但是有两个例外不能换行
296347
@@ -300,7 +351,7 @@ if-else 推荐加上{};
300351** [ ↑ 返回目录] ( #zero ) **
301352
302353<a name =" footer " ><a />
303- ## 六、面试题 :
354+ ## 六、练习题 :
30435501-02-01、var a=b=c=d=1是什么意思?如果接下来在写一句a=9;a,b,c的值分别是多少?
30535601-02-02、var a=b=c=d=[ 1,2,3,4,5] 是什么意思?如果接下来再写一句d[ 5] =0,a,b,c的值分别是多少?
30635701-02-03、var a=b=c=d=[ 1,2,3,4,5] 是什么意思?如果接下来在写一句d=[ 0] ,a,b,c的值会发生变化吗?
@@ -311,10 +362,12 @@ if-else 推荐加上{};
31136201-02-08、说一说html代码,css代码和js代码的注释写法;
31236301-02-09、以下哪些单词不属于javascript保留字
313364
314- A、with
315- B、parent
316- C、class
317- D、void
365+ ``` $xslt
366+ A、with
367+ B、parent
368+ C、class
369+ D、void
370+ ```
318371
319372-
320373
0 commit comments