索引

[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)    
                }
            }
            

转义字符

最后修改:2024 年 05 月 30 日
如果觉得我的文章对你有用,请随意赞赏