索引
[TOC]
let 和 var关键字的区别
let 和 var 都是 JavaScript 中用于声明变量的关键字,但它们在作用域、变量提升(Hoisting)和重新声明等方面有所不同:
作用域:
var 关键字声明的变量具有函数作用域(在ES6之前),也就是说,在同一个函数内部,它在整个函数体内都是可见的,而在函数外部则为全局作用域。
let 关键字声明的变量具有块级作用域,这意味着变量在其所在的代码块内有效。比如在 {} 内部定义的 let 变量只能在这个大括号范围内访问到,出了这个范围就无法访问了。
变量提升(Hoisting):
var 声明的变量会被提升到其所在作用域(函数或全局)的顶部,即使声明语句位于代码块的后面,也可以在声明前使用该变量,值为 undefined。
let 声明的变量不会被提升到整个作用域的顶部,而是存在“暂时性死区(Temporal Dead Zone, TDZ)”,在声明前试图访问 let 变量会抛出 ReferenceError 错误。
重复声明:
在同一作用域内,多次使用 var 声明同一个变量是允许的,并不会报错,只会覆盖前面的声明。
使用 let 声明变量时,在相同的作用域内不允许重复声明。如果尝试在同一作用域内再次用 let 声明同一个变量名,JavaScript 会抛出 SyntaxError 错误。
循环中的区别:
在for循环等场景中,var 往往会导致闭包问题,因为每次迭代都会重用相同的全局变量。
let 则会在每次循环迭代时创建一个新的独立变量,解决了这类循环内的作用域问题。
绑定对象属性:
使用 var 声明的全局变量会成为全局对象(如浏览器环境下的 window 对象)的属性。
使用 let 声明的全局变量不会自动变成全局对象的属性,它依然保持块级作用域特性。
总结起来,let 的引入增强了 JavaScript 的作用域控制能力,降低了因变量作用域和提升机制带来的潜在错误,并提供了更精确的变量生命周期管理。从 ES6 开始推荐使用 let 和 const 替代 var 来声明变量,以提高代码质量与可维护性。
数据类型
Undefined类型
所有Undefined类型的输出值都是undefined。当需要输出的变量从未声明过,或者使用关键词var声明过但是从未进行赋值时会显示undefined字样
Null类型
null值表示变量的内容为空,可用于初始化变量,或者清空已经赋值的变量。
String类型
Number类型
在JavaScript中使用Number类型表示数字,其数字可以是32位以内的整数或64位以内的浮点数。
Boolean
布尔值(boolean)在很多程序语言中都被用于进行条件判断,其值只有两种:true(真)或者false(假)。
检测变量的数据类型
typeof();
//使用 console.log 输出 typeof()的值
console.log(typeof());2024-03-12
/*
位置对照
hello worl d !
0123456789 10 11
*/
let str="hello world!"; //12 个字符
/*
这是JavaScript的一个历史遗留问题,
实际上在最新的ECMAScript规范中,
typeof null 的结果仍为 "object",
尽管 null 不是一个真正的对象实例。
*/
console.log(typeof(null));//object
//定义变量但是未赋值的情况 返回 Undefined
let x;
console.log(x);//undefined
// 获取字符串长度
console.log(str.length);//12
// 字符串的开始位置(0)向后搜索(从左往右)
console.log(str.indexOf("w")); //6
// 它从字符串的结束位置向前搜索(从右往左)
console.log(str.lastIndexOf("w")); //6
// 从起始搜索位置 向后搜索(从左往右)
console.log(str.indexOf("w",1)); //6
// 从起始搜索位置 向前搜索(从右往左)
console.log(str.lastIndexOf("w",8)); //6
// 从起始搜索位置 向后搜索(从左往右)
console.log(str.indexOf("e",2)); //未找到返回-1
// 截取一段字符 包左不包右 (起始位置,结束位置)
console.log(str.substring(3,12)); //lo world!
console.log(str.slice(0,4));//hell
console.log(str.slice(2));//llo world!
// 截取(位置)上的单个字符
console.log(str.charAt(3)); //l
// 获取(位置)上的 ASCII 码
console.log(str.charCodeAt(3)); //108
//拼接字符串
console.log(str.concat("javascript")); //hello world!javascript
console.log(str+"hi xiaohu");
//字符替换
console.log(str.replace("world","MySQL"));//hello MySQL!
//转换小写
console.log(str.toLowerCase());//hello world!
//转换大写
console.log(str.toUpperCase());//HELLO WORLD!
//全局搜索(/g) hello
//RegExp 对象:https://runoob.com/jsref/jsref-obj-regexp.html
console.log(str.match(/hello/g)); //(1) ['hello']
//全局搜索(/g)xiaohu
console.log(str.match(/xiaohu/g)); //未找到返回:null
console.log(str.search(/h/g,"A"));//0
// 3*(10的4次方)
console.log(3e4);//30000
// 3*(10的-4次方)
console.log(3e-4);//0.0003
// 十六进制
console.log(0xa);//10
// 八进制
console.log(010);//8
//浮点数 0.3 0可以省略
console.log(0.3)//0.3
console.log(.3)//0.3
//保留小数
let num=3.1415926;
console.log(num.toFixed(3));
/*
使用浮点数进行计算,有时会产生误差
表达式使用的是十进制数,但是实际的计算是转换成二进制数计算再转回十进制结果的,在此过程中有时会损失精度。
*/
console.log(0.7+0.1);//0.7999999999999999
//解决办法:两个加数都乘以10进行计算后再除以10还原。
console.log((0.7*10+0.1*10)/10);
/*
Infinity表示无穷大的含义,有正负之分。
当数值超过了JavaScript允许的范围
就会显示为Infinity(超过上限)或-Infinity(超过下限)
*/
console.log(9e30000);//Infinity
/*
数字比较大小时,无论原数据值为多少,
结果为Infinity的两个数认为相等,
而同样两个-Infinity也是相等的
*/
let x1 = 3e9000;
let x2 = 9e3000;
console.log(x1==x2);//ture
/*
正数除以0返回值就是Infinity,
负数除以0返回值为-Infinity,
特殊情况0除以0的返回值为NaN(非数字)
*/
console.log(1/0);//Infinity
console.log(-1/0);//-Infinity
console.log(0/0);//NaN
/*
Infinity不可以与其他正常显示的数字进行数学计算
Number.POSITIVE_INFINITY 是一个特殊的数值常量,表示正无穷大
进行非法数学运算,例如 0 / 0 或者 Infinity - Infinity 等操作时,才会返回 NaN(Not a Number)
*/
let Inf=9e3000;
console.log(Number.POSITIVE_INFINITY+3);//Infinity
console.log(Inf);//Infinity
console.log(Inf-Inf);//NaN
//数据类型转换 String to Number
let str1="1",str2="a";
console.log(Number("1"));//1
// 使用 isNaN()查询变量是否可以转换为 Number类型
console.log(isNaN(str1));//false
console.log(isNaN(str2));//true
/*
转义字符
\n表示换行
\t 制表符
\b 空格符
\r 回车符
\f 换页符
\0nnn nn表示字符 八进制 n 是 0-7 range:000-037
\xnn 十进制 n 是 0-f range:00-ff
\unnn 十六进制 n 是0-f
*/
console.log("hello world\nhello javascript\thello mysql");
console.log("\"hello xiaohu\"")//"hello xiaohu"
console.log("\'xiaohu\'");//'xiaohu'
console.log("\\xiaohhu\\");// \xiaohu\
console.log("\/xiaohu\/");// /xiaohu/
console.log("\//xiaohu\//");// //xiaohu//
console.log("\\\\xiaohu\\\\");// \\xiaohu\\
/*
hello world
hello javascript helllo mysql
*/
// Boolean ture or false
console.log(1>2);//false
console.log(1<2);//true
JavaScript RegExp 对象(正则表达式)
https://tongyi.aliyun.com/qianwen/share?shareId=c5a169da-058b-44eb-bdde-d6abee16b0cf
2024-03-19
一、 布尔值和数字转换为字符串:
1、 将布尔值false转为字符串,在控制台打印输出结果
2、将数字300分别转换为二进制、八进制和十六进制数,在控制台打印输出结果
二、字符串转换为数字:
1、将字符串“3.14.15”分别转换为整数型和浮点型数字
三、强制转换
1、分别将null,undefined,50,0,“”,“hello”转换为布尔值,在控制台打印输出结果
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script>
// Boolean转换字符串
let buer=false
let tostr=buer.toString()
// console.log("布尔转字符串后的值")
console.log(tostr)
// console.log("布尔转字符串后的类型")
// console.log(typeof(tostr))
// 数字转换进制
let num=300
// console.log("数字转2进制")
console.log(num.toString(2))
// console.log("数字转8进制")
console.log(num.toString(8))
// console.log("数字转16进制")
console.log(num.toString(16))
//字符串转换数字
let str="3.14.15"
let tonum_int=parseInt(str)
let tonum_float=parseFloat(str)
// console.log("字符串转数字后的值")
console.log(tonum_int)
console.log(tonum_float)
// console.log("字符串转数字后的类型")
// console.log(typeof(tonum_int))
// console.log(typeof(tonum_float))
// console.log(parseInt("3.14.15"))
// console.log(parseFloat("3.14.15"))
//强制转换
console.log(Boolean(null))
console.log(Boolean(undefined))
console.log(Boolean(50))
console.log(Boolean(0))
console.log(Boolean(""))
console.log(Boolean("hello"))
// let buer_null=null
// let buer_undefined=undefined
// let buer_50=50
// let buer_0=0
// let buer_str1=""
// let buer_str2="hello"
// let tobuer_null=Boolean(buer_null)
// let tobuer_undefined=Boolean(buer_undefined)
// let tobuer_50=Boolean(buer_50)
// let tobuer_0=Boolean(buer_0)
// let tobuer_str1=Boolean(buer_str1)
// let tobuer_str2=Boolean(buer_str2)
// console.log("强制Boolean的值")
// console.log(tobuer_null)
// console.log(tobuer_undefined)
// console.log(tobuer_50)
// console.log(tobuer_0)
// console.log(tobuer_str1)
// console.log(tobuer_str2)
// console.log("强制Boolean后的数据类型")
// console.log(typeof(tobuer_null))
// console.log(typeof(tobuer_undefined))
// console.log(typeof(tobuer_50))
// console.log(typeof(tobuer_0))
// console.log(typeof(tobuer_str1))
// console.log(typeof(tobuer_str2))
</script>
</head>
<body>
</body>
</html>
let r=2.5
let c=Math.PI*2*r//周长
let s=Math.PI*r*r//面积
let v=(4/3)*Math.PI*r*r*r//体积
console.log(s.toFixed(2),c.toFixed(2),v.toFixed(2))
let fruit = ["apple","banana","orange","pear","pineapple"]
console.log(fruit)
var date=new Date()
var week=["日","一","二","三","四","五","六"]
console.log("今天是"+date.getFullYear()+"年"+(date.getMonth()+1)+"月"+date.getDate()+"日"+"星期"+week[date.getDay()])
let ticket = new Object()
ticket.name="你想活出怎样的人生"
ticket.time="2024.03.04"
ticket.price=20
ticket.seat=10
console.log(ticket)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script type="text/javascript">
//1.求1-100之间所有数之和的平均值
var sum=0
for(var i=1;i<=100;i++){
sum+=i//sum=1-100所有数之和
}
console.log(sum/100);
//2.1-100之间所有偶数之和,所有奇数之和
let ou=0,odd=0
for(let i=1;i<=100;i++){
if(i%2==0){
ou+=i//
}else{
odd+=i
}
}
console.log(ou,odd);
//3.求1-100之间所有能被3整除的数字之和
let num_3=0
for(let i=1;i<=100;i++){
if(i%3==0){
num_3+=i
}
}
console.log(num_3);
//4.
let flag=true
while(flag){
let str=prompt("你有好好学习吗?")
if(str=="我有好好学习"){
flag=false
alert("那你很优秀哦")
}
}
// do{
// let str=prompt("你有好好学习吗?")
// if(str=="我有好好学习"){
// flag=false
// alert("那你很优秀哦")
// }
// }while(flag)
//2.
// let str1
// do{
// str1=prompt("你有好好学习吗?")
// }while(str1!="我有好好学习")
// console.log("sss");
//3.
// let str2
// while(str2!="我有好好学习"){
// str2=prompt("你有好好学习吗?")
// }
</script>
</body>
</html>
switch 星期
let a =new Date().getDay()
// let n=a.getDay()
switch(a){
case 0:
console.log("星期天")
break;
case 1:
console.log("星期1")
break;
case 2:
console.log("星期2")
break;
case 3:
console.log("星期3")
break;
case 4:
console.log("星期4")
break;
case 5:
console.log("星期5")
break;
case 6:
console.log("星期6")
}99乘法表
for(let i=1;i<=9;i++){
for(let j=1;j<=9;j++){
console.log(i+"x"+j+"="+i*j)
}
}



1 条评论
写的很详细具体,学习到了,多谢博主的分享!⌇●﹏●⌇