20230228----重返学习-数组-引用数据类型的转换-基础调试用方法-对象检测-各数据转布尔值及相等运算符-条件语句-循环语句

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({})//trueBoolean([])//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({})//NaNNumber({0:1})//NaNNumber({a:1})//NaN
- 先转为
- 都为
数组转为数字- 先转为
字符串,之后用Number()来转化。 Number([])//0Number([1])//1Number([1,2])//NaN
- 先转为
基础调试
-
console.log()- 在
控制台上打印出多个内容。控制台想要看见,一般就用这个console.log()。
- 在
-
console.dir()- 在
控制台上输出一个对象或者一个值的详细信息- 一般用在函数上。
console.dir()不可以一次性输出多个值。
- 在
-
alert()- 在
浏览器窗口中弹出一个提示框,提示框中输出指定的信息。- 只传一个参数,并且
里面的参数都会通过toString()转成字符串并展示。
- 只传一个参数,并且
- 在
-
confirm()- 在
浏览器窗口中弹出一个提示框,允许用户选择,并返回一个布尔值。- 只传一个参数,并且
里面的参数都会通过toString()转成字符串并展示。 - 点击
确定,结果是true。 - 点击
取消,结果是false。
- 只传一个参数,并且
- 在
-
prompt()- 在
浏览器窗口中弹出一个提示框,允许用户输入字符串。- 只传一个参数,并且
里面的参数都会通过toString()转成字符串并展示。 - 点击
取消,必定得到null。 - 点击
确定,都是input输入框里的字符串值。
- 只传一个参数,并且
- 在
对象检测
typeof- 不会细分
对象 null为什么也是objecttypeof会把变量转为二进制,000开头就会识别为对象,null是64位都是0。
- 结果是
字符串,即单引号''包着数据类型。
- 不会细分
instanceofconstructorObject.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循环结束


