循环/引用值初识/显示及隐式类型转换

4 阅读4分钟

📌 循环

for循环

循环代码块一定的次数

//语法
for( 初始化变量; 控制条件表达式判断; 操作表达式 ){
        执行语句
}

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

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

//执行步骤:
/*
 *1.声明变量 var i = 0;    ----初始化变量
 *2.运行循环的条件  i < 10;  ----控制条件表达式判断
 *3.满足条件执行循环代码块语句 ----执行语句
 *4.执行操作表达式            ----操作表达式
 */

while循环

当指定的条件为 true 时循环指定的代码块

//语法
var 初始化变量
while( 控制条件表达式判断 ){
          循环体
          操作表达式++
 }

**do/while循环——**项目中很少使用

特点:条件无论真假,循环体至少要执行一次

//语法
var 初始化变量
do {
    循环体
    操作表达式++
} while( 控制条件表达式判断 );

退出循环语句

  • continue 退出本次循环 退出当前次循环,继续执行剩余次数
  • break 退出整个循环 结束整个循环,后续的循环都不执行了

小试牛刀

//从0开始累加,求累加和小于100的数字?
var sum = 0
for(var i = 0; i <= 100; i++){
	sum += i
  if(sum >= 100){
  	break;
  }
  console.log(i, sum)
}

-------------------------------------------------------------------------------
  
//筛选100以内,除去可以被7整除或个位数为7的数字?
  for(var i = 0; i <= 100; i++){
  	if(i % 7 == 0 || i % 10 == 7){
    	continue;
    }
    console.log(i)
  }

-------------------------------------------------------------------------------
  
/*面试题:
 *实现打印0-100的数?
 *()中不允许写逻辑比较运算符
 *{}中不允许写子增量或自减量
 */
  var i= 100;
  for(;i--;){
		console.log(i)
  }

-------------------------------------------------------------------------------
  
/*面试题:
 *10的N次方?
 */
  var n = 5,
    	num = 1;
	for(var i= 0 ; i <= n; i++){
  	 num *= 10
  }
	conslole.log(num)

-------------------------------------------------------------------------------
/*面试题:
 *n的阶乘?
 */
   var n = 5,
       num = 1;
	 for(var i = 1 ; i <= n; i++){
   			num *= i
   }
   conslole.log(num) 

📌 引用值初识

数组Array

记录若干数据,相当于一个数据容器

//通过字面量创建新数组【常用】
var arr = []  //空数组
var arr = [值1,值2,值3,值4,···]  //非空数组
  • 数组名[ 索引 ] :访问数组元素,对应索引无数据,输出undefined
  • 数组名[ 索引 ] = 值 :数组的索引是从0开始,给对应索引赋值
  • 数组名.length :获取数组中元素个数
    • arr[ arr.length ] = 值 ——> length会动态改变,可给数组添加元素
    • arr.length = number ——> 设置数组长度(大于数组长度有空位置,小于则会删除多余元素)

对象Object

无序数据集合,属性值可以是基本值、对象、函数

//通过字面量  创建新对象【常用
var obj = {}                  //空对象

var obj = {                   //非空对象1: '字符串', 
    键2: number,
    键3: function() {},
    ··· 
    '键4': true,
    'say-hi': function() {}, //js命名规范不允许使用‘-’横杠,加引号可使用
}                  							 

数据类型检测 typeof

typeof "John"                // 返回 string
typeof 3.14                  // 返回 number
typeof false                 // 返回 boolean

typeof [1,2,3,4]             // 返回 object
typeof {name:'John', age:34} // 返回 object

typeof null                  // 返回 object
typeof undefined             // 返回 undefined

undefined 和 null 区别

  • 你可以使用 null 或者 undefined 来清空对象
    • var person = null; ——> 值为 null(空), 但类型为object
    • var person = undefined; ——> 值为 undefined, 类型为 undefined
  • null 和 undefined 的值相等,但类型不等
    • typeof undefined        // undefined
    • typeof null                  // object
    • null === undefined    // false
    • null == undefined       // true

何时使用null

  • 当使用完一个比较大的对象时,需要对其进行释放内存时,设置为 null

相同点

  • 都是原始类型保存在栈中变量本地

不同点

  • undefined——表示变量声明过但并未赋过值
  • null——表示一个变量将来可能指向一个对象

📌 显示/隐式类型转换

显示类型转换

  • Number( ) :强制转化为数字
    • Number( 布尔值 ) ——> true为1,false为0
    • Number( undefined ) ——> NaN
    • Number( null ) ——> 0
    • Number( '字符串' )
      • 数字字符串——> 数字类型值,否则NaN
      • 空字符串 ——> 0
      • 数字+字符串 ——> NaN

  • String( ) :强制转化为字符串
    • String( 数值 ) ——> 字符串类型"数字"
    • String( 布尔值 ) ——> true为 "true",false为 "false"
    • String( undefined ) ——> " undefined "
    • String( null ) ——> " null "

  • Boolean( ) :强制转化为布尔类型
    • undefined、null、-0、0、+0、NaN、" " ——> 布尔值为false,其余都为true

  • isNaN( ) :判断是否为 非数字
    • 先通过Number( 值 ) ——> 判断是否为NaN ——> NaN为true,否则false

隐式类型转换

  • + :和字符串进行加号的拼接,结果都是字符串
  • - * / % :利用减、乘、除、取余都会隐式调用Number( ) 转换为数值型

常见特殊类型转换