📌 循环
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( ) 转换为数值型
常见特殊类型转换
📋 课后作业
利用for循环算出斐波那契数列的第N位
var n = parseInt(window.prompt('N=?'))
斐波那契数列:1 1 2 3 5 8 13 21 ...
------------------------------------------------------------------
var n = parseInt(window.prompt('请输入需要斐波那契第几位数字?'))
if (n <= 0) {
alert('您输入的位数不存在!')
} else {
if (n <= 2) {
console.log(1);
} else {
var n1 = 1,
n2 = 1,
n3;
for (var i = 2; i < n; i++) {
n3 = n1 + n2;
n1 = n2;
n2 = n3;
}
console.log(n3);
}
}