03-循环、引用值初识、显示与隐式转换

本文详细介绍了JavaScript中的循环,包括for循环的特殊写法和无break、return情况下的循环终止。接着讲解了Array和Object的基本操作,以及typeof方法的用法和返回值。重点讨论了显示类型转换,如Number、parseInt、parseFloat等,并探讨了隐式类型转换,如自增、字符串相加、比较运算符的情况。最后,文章提到了isNaN()方法的使用及其在不同值上的表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、循环

1、for循环的另一种写法

var i = 0;
for(; i < 10; ) {
  console.log(i);
  i++;
}

看上去其实就是while循环。所以我们清楚 ,for和while是可以互相转换的。

2、如果不用break、return如何终止循环?

for(; i; ) {
  console.log(i);
  i++;
  if(i === 11) {
  	i = 0;  //这里只是一个固定的场景,就是要把循环条件给弄成false
  }
}

我们想方设法把for循环的终止条件弄为false就可以了。

3、一些面试题

// 打印0-100的数
// 要求:()内只能有一句语句
//	 	 {}中不能出现i++、i--

// 我们这道题必须是要有++或者--的,不能出现在{}中,那么只能出现在()中了
var i = 101;  // 注意是101哈,因为第一步要先减一
for(; i--; ) {  // 这里必须是使用i--后自减的方式哈,因为如果是前自减,那么就没办法打印0了
  console.log(i);
}
// 用for循环计算10的n次方
var n = 5;
var num = 1; // 这里是1
for(var i = 0; i < n; i++) {
	num *= 10;
}
// 翻转一个数,如45678 --> 87654

var invertNum = function(num) {
    var res = 0;  // 起始值是0,因为一开始是个位数*10必须要为0
    for (; num;) {
        res = res * 10 + (num % 10); // 乘10之后在把当前数的个位数加上
        num = Math.floor(num / 10); // 去掉最后一位数
    }
    return res;
}
// 打印1-100以内的质数
var c = 0;
for (var i = 2; i <= 100; i++) {
    // 从1到其自身遍历,i就是我们要判断是不是质数的数,所以用它来除以从1到其自身的数
    // 如果刚好只有两个数能被其整除,那么这个数就是质数。
    for (var j = 1; j <= i; j++) {
        if (i % j === 0) {
            c++;
        }
    }
    if (c === 2) {
        console.log(i);
    }
    c = 0; // 归零,为下一次做准备
}

二、Array、Object简单基本用法

1、Array基本用法

定义:var arr = [1, 2, 3, 4];

取值:arr[0];

修改值:arr[1] = 6;

遍历:for(var i = 0; i < arr.lengt; i++) {

console.log(arr[i]);

}

2、Object的基本用法

定义:var person = {

name: 'xxx',

age: 18

}

取值:person.name

修改值:person.name = xxx;

三、typeof方法

1、用法:

typeof(xxx) 返回字符串形式的类型。

2、有哪些值呢?

  • 基本数据类型除了null之外,都是可以直接返回对应的类型的字符串。
  • 引用数据类型除了Function之外都返回Object。
  • null、Array都是Object
  • 补充:为什么null是Object类型呢?
    • 这是一个历史遗留问题。一开始的null的意思是空对象。空对象指针。后来es6有很多人提议把typeof(null) 输出为null类型,而不是object类型。但是被拒绝了。因为已经开发了那么多程序,已修改的话很多很多程序都用不了。

3、一道题

前面如果没有定义a,那么如下代码会怎么输出?

console.log(a);   // 直接报错,因为前面未定义。
console.log(typeof(a)); // 输出undefined。可以假装这个a是声明了
console.log(typeof(+)); // 直接报错。因为这个值不可作为变量被声明
console.log(typeof(typeof(123)); // 输出string,因为typeof返回的值的类型是string

四、显示类型转换

1、Number()

  • Number('123') ==> 数字123
  • Number('abc') ==> NaN
  • Number(null) ==> 0
  • Number(false) ==> 0 true为1
  • Number(undefined) ==> NaN
  • Number({}) ==> NaN

也就是除了null、Boolean、String,其他类型用Number显示转换的话都是NaN。String如果不是数字的话也是转换为NaN。

2、parseInt()

1、只能转换字符串和数字类型其余全部为NaN

  1. parseInt(3.14) ==> 3 (直接去掉小数部分而非四舍五入)
  2. parseInt('3.14') ==> 3
  3. parseInt('123abc') ==> 123 (会先读取前面的数字,然后转换,遇到字符串则把后面的字符串都丢掉)
  4. parseInt('abc123') ==> NaN (字符串后面的数字全部扔掉,也就是全部扔了,所以是NaN)
  5. parseInt('abc') ==> NaN
  6. parseInt(undefined) ==> NaN
  7. parseInt(null) ==>NaN
  8. parseInt(false) ==> NaN

2、parseInt还有第二个参数,radix基数的意思,取值范围为2-36

如:parseInt('10', 16) ==> 16 // 就是这个字符串本来就是16进制,把转换为整数的同时,还要把他转换为十进制。

parseInt('a', 16) ==> 10

parseInt('4', 2) ==> NaN // 因为2进制里不可能出现4

3、parseFloat()

  • 这个比较简单,跟parseInt一样。但是他后面没有第二个参数了,直接转为float
  • 如果想要保存为小数点后几位的小数,那么可以使用toFixed()方法(会四舍五入)
  • 如: parseFloat('3.1415926').toFixed(2) ==> 3.14

4、String()

String就没什么可讲了,里面放啥东西都能变成string类型。

5、toString()

1、str.toString(),也是可以转换为字符串

2、与String()不一样的是,undefined和null不可以使用这个方法。会报错。

3、该方法也是有一个参数的,也是radix。他的意思是转换为多少进制的字符串

如:

var a = 100;

a.toString(16) ==> '64' // 将100转换为16进制了。

6、Boolean()

除了undefined、null、''、NaN、0、false这六种是false以外,其他全部都是true

五、隐式类型转换

1、自增(++)、自减(--)发生的隐式转换 Number()

在进行++、--的时候会自动发生隐式转换Number()

如:var a= '123';

a++; // 此时的a为124

2、字符串和数字相加(+)发生的隐式转换 String()

如:var a = 'a' + 1; // 此时的a为'a1'

3、(*、/、-、%)这些运算符运算时发生的隐式转换 Number()

如:var a = '3' * '2' // 此时a为6

4、比较运算符(>、<、==、!=)进行运算时发生隐式转换 Number()

如:'1' > 2 // 此时返回的是false,因为'1' 会被隐式转换为数字1

注意:

这里的比较运算符是其中一边是数字,另外一边是字符的方式才能进行Number()隐式转换哈,如果两边都是字符,如'a' > 'b'这种,是会自动根据ASCII的值来进行比较的。

5、(===、!==)运算符不会发生隐式转换

6、NaN不与任何值相等,包括其自身。

NaN == NaN // false

NaN === NaN // false

7、undefined与null之间的关系

undefined == null // true

undefined === null // false

注意:他们两个都不与0扯上关系

undefined == 0 // false

undefined > 0 // false

undefined < 0 // false

null == 0 // false

null > 0 // false

null < 0 // false

8、关于正负号(+、-)的隐式转换,注意不是加减

如:

var a = '123';

+a; // 返回Number类型的123

-a; // 返回Number类型的-123

9、一些练习

1、a1 = 2 > 1 > 3;

返回false,因为2 > 1 返回1,1 > 3 false

2、a2 = 2 > 1 == 1;

返回true,因为2 > 1 返回1,1 == 1 true

六、isNaN() 方法

作用:用来判断一个数是不是NaN。

请注意:

1、NaN的意思是not a number,不是一个数字。

2、isNaN() 会自动发生隐式转换,Number()

请认真观看下面的案例,要完全记下来的。只要记得Number转换之后的值是不是NaN就OK了。

  • isNaN(NaN) // true
  • isNaN(123) // false,因为123是数字
  • isNaN('123') // fasle,因为他是字符串,但是会发生隐式转换,所以转换成了123,是一个数字,所以不是NaN
  • isNaN('a') // true,因为Number('a') 会转换为NaN,isNaN刚好就判断出来是NaN,那肯定是true。
  • isNaN(undefined) // true,因为Number(undefined)会转换为NaN
  • isNaN(null) // false,因为Number(null)会转换为0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值