day-017-seventeen-20230228-数组-引用数据类型的转换-基础调试用方法-对象检测-各数据转布尔值及相等运算符-条件语句-循环语句
数组
-
字面量表示法
[数组成员0,数组成员1,数组成员2]
-
用中括号语法来取值
var ary = [5,6,7] console.log("ary[0]--->", ary[0])
-
数组构成
//下标/索引 0 1 2 var ary = [1,2,3]//{0:1,1:2,2:3,length:3,[[Prototype]]: Array} console.log("ary[0]--->", ary[0])
- 数组成员
1
与2
与3
。 length
: 数组长度。
-ary.length-1
表示数组ary
的最后一项的索引
。
-ary[ary.length-1]
表示数组ary
的最后一项
。
- 数组成员
引用数据类型的转换
对象
与数组
转为布尔值
- 依旧都为
true
Boolean({})//true
Boolean([])//true
- 依旧都为
对象
转为字符串
- 都为
'[object Object]'
。 String({})//'[object Object]'
String({a:1})//'[object Object]'
String(String({a:1,b:2}))//'[object Object]'
- 都为
数组
转为字符串
数组里面的每一项
都转为字符串
,如果有两项及两项以上
则用逗号,
拼接起来String([])//''
String([1])//'1'
String([1,2])//'1,2'
String([1,true])//'1,true'
String([1,null])//'1,'
- 因为
(null).toString()//会报错
,所以null
转为空字符串
了之后与其它元素
拼接。
- 因为
String([1,undefined])//'1,'
- 因为
(undefined).toString()//会报错
,所以undefined
转为空字符串
了之后与其它元素
拼接。
- 因为
对象
转为数字
- 都为
NaN
。- 先转为
字符串
,之后用Number()
来转化。Number({})//NaN
Number({0:1})//NaN
Number({a:1})//NaN
- 先转为
- 都为
数组
转为数字
- 先转为
字符串
,之后用Number()
来转化。 Number([])//0
Number([1])//1
Number([1,2])//NaN
- 先转为
基础调试
-
console.log()
- 在
控制台
上打印出多个内容。控制台
想要看见,一般就用这个console.log()
。
- 在
-
console.dir()
- 在
控制台
上输出一个对象或者一个值的详细信息- 一般用在函数上。
console.dir()
不可以一次性输出多个值。
- 在
-
alert()
- 在
浏览器窗口
中弹出一个提示框
,提示框
中输出指定的信息。- 只传一个参数,并且
里面的参数
都会通过toString()
转成字符串
并展示。
- 只传一个参数,并且
- 在
-
confirm()
- 在
浏览器窗口
中弹出一个提示框
,允许用户选择,并返回一个布尔值
。- 只传一个参数,并且
里面的参数
都会通过toString()
转成字符串
并展示。 - 点击
确定
,结果是true
。 - 点击
取消
,结果是false
。
- 只传一个参数,并且
- 在
-
prompt()
- 在
浏览器窗口
中弹出一个提示框
,允许用户输入字符串。- 只传一个参数,并且
里面的参数
都会通过toString()
转成字符串
并展示。 - 点击
取消
,必定得到null
。 - 点击
确定
,都是input输入框里的字符串值
。
- 只传一个参数,并且
- 在
对象检测
typeof
- 不会细分
对象
null
为什么也是object
typeof
会把变量
转为二进制
,000
开头就会识别为对象
,null
是64位都是0
。
- 结果是
字符串
,即单引号''
包着数据类型
。
- 不会细分
instanceof
constructor
Object.prototype.toString.call()
转布尔值
-
!!变量
相当于Boolean(变量)
!!100;//true
!!'';//false
!![];//true
-
!
先把后面的值转为字符串,再取反。
!''//true
-
加号+
的计算规则-
数字
+数字
,正常加。 -
数字
+字符串
,直接拼接。 -
数字
+非字符串的基本数据类型
,其它类型转number类型
再加。 -
数字
+对象
,对象
转字符串
,拼串。 -
+
变量,一个加号强行转number类型
-
示例:
1+{}//'1[object Object]'
{}+1//1
把左边花括号{}
当成了空代码块
,实际上就是+1
即1
。({})+1//'[object Object]1'
把左边花括号{}
变成了对象{}
,之后对象{}
转成字符串'[object Object]'
+1//1
一个加号强行转number类型
,+true//1
一个加号强行转number类型
,+{}//NaN
一个加号强行转number类型
,对象{}
转成字符串'[object Object]'
,字符串'[object Object]'
转成NaN
+[]//0
一个加号强行转number类型
,,空数组[]
转成空字符串''
,空字符串''
转成0
+[1,2]//NaN
一个加号强行转number类型
,数组[1,2]
转成字符串'1,2'
,字符串'1,2'
转成NaN
-
JavaScript运行机制
浏览器开辟两块内存
Stack栈
- 存储
基本数据类型
- 供
js代码
执行
- 存储
Heap堆
- 存储
引用数据类型
- 存储
赋值三步曲
- 创建值
- 创建变量
- 赋值(连接起来)
原始值类型
操作的是值
,引用数据类型
操作的是空间地址
条件语句
if语句
括号里的条件
最终会是布尔值
,如果是true
,就会进入并执行。
else里的语句
在if语句
及else if语句
都不执行的情况下,就会自动执行。
同一语句团
里,如果if语句
或else if语句
有一个判断为true
,那么就只执行这一语句块
,余下语句块
都会被跳过。
if(怎么样){//code...}
if(1>0){console.log("if()里条件对了,执行if语句");//"if()里条件对了,执行if语句"}
if(4>5){console.log('if()里条件对了,只执行if语句')}else{console.log('if()里条件不对,else语句执行')//'if()里条件不对,else语句执行'}
//进且必定只进一个。if(1>0){console.log("if()里条件对了,只执行if语句")//"if()里条件对了,只执行if语句"}else if(3>2){console.log("if()里条件错了,else if()里条件对了,执行else if语句")}else{console.log("if()里条件错了,else if()里条件错了,执行else语句")}
var num = 1if(num){console.log("if()里条件对了,执行if语句");}
switch多向分支
一个变量在不同值情况下的不同操作,我们可以改写为switch case
判断
var num = 100
switch (num) {case 50:console.log("case 50--");break;case 100:console.log("case 100--");break;case 150:console.log("case 150--");break;case 200:console.log("case 200--");break;default //=>等价于else,而且最后一个判断结束无需设置breakconsole.log("default语句");
}
变量传进来的值
与case的值
必须全等才会执行- 如果
case语句
执行了,但没遇到break
,会一直跳过后方的case值
直到后面case语句
中有break
。
==的规则
原始值类型
长得一模一样就相等为true
。对象
必须空间地址相同
才相等为true
。不同数据类型
之间,除了对象
和字符串
要转字符串
进行比较,其他不同类型
都是转number
再进行比较。null
==undefined
,相等为true
。null
和undefined
和其他值
永远不等
。NaN
六亲不认,包括自己。var a=NaN;var b=a;console.log(a==b);//false
循环语句
-
while(){}
-
while循环
是先判断后循环
。 -
条件为
true
,就执行
。 -
一定要在
循环体
内改循环条件依赖的变量
,否则将会一直循环
下去。let fang1 = 0; while (fang1 < 0) {console.log(fang1, 1);//不执行fang1++;//在`循环体`内`改循环条件依赖的变量`; }
-
-
do{}while()
-
do–while循环
是先循环后判断
。 -
不管三七二十一先执行一遍
-
一定要在
循环体
内改循环条件依赖的变量
,否则将会一直循环
下去。let fang2 = 0; do {console.log(fang2, 2);//执行一次fang2++;//在`循环体`内`改循环条件依赖的变量`; } while (fang2 < 0);
-
-
for(){}
for (循环变量; 循环条件; 循环变量变化) {//循环体; }
for (var i = 0; i < 3; i++) {console.log(111);console.log(i);//0 1 2 } console.log(i);// 3 // @1 var i=0 // @2 i<3 执行 console.log(111); // @3 i++ i=1 // @4 i<3 执行 console.log(111); // @5 i++ i=2 // @6 i<3 执行 console.log(111); // @7 i++ i=3 // @8 i<3 不满足 整个for循环结束