Web基础 ( 七 ) 变量

news/2024/7/24 2:45:22 标签: 前端, javascript, 开发语言

4.3.变量实例及内置对象

4.3.1.string 字符串

// string
var a = "abc"
console.log( typeof(a) )  //string

var b = 'efg'
console.log( typeof b )  //string

var c = a>b
console.log( c )   //  字符串比较按字母顺序

console.log("abc\nefg") // \n 转义字符

// String 包装类
var str=new String("zhe sHi yi ge zi fu chuan");
console.log( "str: ", str)
console.log( "length: ", str.length )  // 长度
console.log( "charAt(0): ", str.charAt(0) ) // 对应索引的字符
console.log( "charCodeAt(0): ", str.charCodeAt(0))  //对应索引的 字符编码
console.log( "concat(' lian shang yi duan'): ", str.concat(" lian shang yi duan") ) //拼接字符串 原字符串不变  ,使用时更多的是用+

console.log( "slice(2,5): ", str.slice(2,5) )  // 截取 , 前闭后开
console.log( "substring(2,5): ", str.substring(2,5) ) // 截取 , 前闭后开
console.log( "substr(2,5): ", str.substr(2,5) )   // 截取 , 从哪位开始 截取几个, 第二个参数是位数

console.log( "slice(-2): ", str.slice(-2));       // - 负数 表示从后面取 
console.log( "substring(-2): ", str.substring(-2))   //  负数当0
console.log( "substr(-2): ", str.substr(-2))     //   IE中有问题,返回字符串  表示从后面取 

console.log( "slice(2,-4): ", str.slice(2,-4));    //  正数 从前面数   负数 从后面数
console.log( "substring(2,-4): ", str.substring(2,-4));//负数当0 变成从0到2

console.log( "indexOf('h'): ", str.indexOf("h"));   //返回第一个匹配的位置,没有返回-1   ,可以通过通过第二个参数指定从第几个字符开始查找
console.log( "indexOf('h', 3): ", str.indexOf("h", 3))   // 返回指定位置之后, 第一个匹配的位置
console.log( "lastIndexOf('h'): ", str.lastIndexOf("h"))  //返回 最后一个匹配的位置

console.log( "toLowerCase(): ", str.toLowerCase())  // 转小写
console.log( "toUpperCase(): ", str.toUpperCase())  // 转大写

console.log( "match(/h/): ", str.match(/h/))	//要传入正则进行查找 ,返回要查询的
console.log( "search(/h/): ", str.search(/h/))	//返回位置

console.log( "replace(/h/g,'$'): ", str.replace(/h/g,'$'))//替换
console.log( "replace('h','$'): ", str.replace("h",'$')) //替换,只改第一个

console.log( "split(' '): ", str.split(" ")); //根据参数分组,返回数组

console.log( "localeCompare('yes'): ", str.localeCompare("yes")); //比较排序

4.3.2.number 数值

// number 
var d1 = 123    // 	十进制
console.log( typeof(d1) ) // number 整数    

var d2 = 0123   //	八进制 0开头
var d3 = 0x123  //  十六进制 0x开头

var e1 = 123.456
console.log( typeof(e) ) // number 浮点数
var e2 = 0.6
var e3 = .6

// Number 包装类
console.log( " Number.MAX_VALUE: ", Number.MAX_VALUE )	// 最大值  Number.MAX_VALUE    1.7976931348623157e+308 
														// 大于它Infinity      Number.NEGATIVE_INFINITY
console.log( " Number.MIN_VALUE: ", Number.MIN_VALUE )	// 最小值  Number.MIN_VALUE     5e-324   
														// 小于它-Infinity     Number.POSITIVE_INFINITY

var f1 = new Number(12.5678);
var f2 = new Number("12.5678");   // 这两种方式不常用

var g1 = "123.456"
var g2 = 123.456
console.log( g1 + g2 )	
console.log( "parseInt: ", parseInt(g1) + g2 )   // 将字符串 转 数字
console.log( "parseFloat: ", parseFloat(g1) + g2 ) // 将字符串 转 浮点数

console.log( "toFixed(2): ", g2.toFixed(2));  //四舍五入截取指定的位数

var nan = "not a number"
console.log( "nan: ", parseInt(nan) )  // 将不是数值型字符串转成数字, 返回 NaN
console.log( "NaN==NaN: ", parseInt(nan) == parseInt(nan) ) // NaN 不等于 NaN

console.log(" isNaN(nan): " ,  isNaN(nan) )  // true , 判断 是否不是数字

4.3.3.boolean 布尔(逻辑)

var h1 = true
console.log( typeof h1)   // boolean 
var h2 = false
console.log( typeof h2)   // boolean

4.3.4.undefined 未赋值

声明但没有初始化的,

相当于 Java语言中的null, 但 js中有null, 所以有的浏览器 两者是混用的

var i;
console.log( typeof i) 	// undefined

4.3.5.转型

JavaScript 可以在没有明确声明的情况下将值从一种类型自动转换为另一种类型,这被称为“隐式类型转换”或“自动类型转换”。

以下是一些常见的自动类型转换示例:

4.3.5.1.数字和字符串的自动类型转换

当数字和字符串进行运算时,JavaScript 会自动将字符串转换为数字,或将数字转换为字符串。例如:

console.log(1 + "2"); // "12"
console.log("3" * 4); // 12
console.log("23"-3);  // 20

在这个例子中,第一个 console.log 语句会将数字 1 转换为字符串 “1”,然后连接字符串 “2”,得到字符串 “12”。

第二个 console.log 语句会将字符串 “3” 转换为数字 3,然后与数字 4 相乘。

第三个 console.log 语句会将字符串 “23” 转换为数字 23,然后与数字 3 相减。

4.3.5.2.布尔值的自动类型转换

当布尔值用于条件语句时,JavaScript 会自动将其他类型的值转换为布尔值。例如:

if ("hello") {
  console.log("字符串在条件语句中被转换为布尔值 true");
}
if (0) {
  console.log("数字 0 在条件语句中被转换为布尔值 false");
}
if (null) {
  console.log("null 在条件语句中被转换为布尔值 false");
}

在这个例子中,第一个 if 语句会将字符串 “hello” 自动转换为布尔值 true。

第二个 if 语句会将数字 0 自动转换为布尔值 false。

第三个 if 语句会将 null 自动转换为布尔值 false。

4.3.5.3.对象和数字/字符串的自动类型转换

当对象用于与数字或字符串进行运算时,JavaScript 会尝试将对象转换为数字或字符串。例如:

console.log({} + 1); // 1 (空对象被转换为数字 0)
console.log({} + "2"); // "[object Object]2" (空对象被转换为字符串 "[object Object]")

在这个例子中,第一个 console.log 语句会将空对象 {} 转换为数字 0,然后加上数字 1,得到数字 1。

第二个 console.log 语句会将空对象 {} 转换为字符串 “[object Object]”,然后连接字符串 “2”,得到字符串 “[object Object]2”。

4.3.5.4.转型的优先级

在 JavaScript 的自动转型中,一些数据类型之间的转换是有优先级顺序的。具体来说,在自动转型时,JavaScript 优先将数据类型转换为数值类型,其次是字符串类型。尤其是在计算中,JavaScript 会尽可能将数据类型转换为数值类型,然后再进行计算。以下是类型转换的优先级顺序:

  1. 操作符优先级最高,操作符两侧的值会优先被转换为数值类型。例如,在加、减、乘、除和取模运算时,JavaScript 会优先将字符串转换为数值。

  2. 当一个对象需要被转换时,先调用它的 valueOf() 方法,如果结果不是原始数据类型,则再调用该对象的 toString() 方法。如果操作符两侧的值都是对象,则不会进行类型转换。

  3. 如果需要将一个非字符串数据类型转换为字符串类型,JavaScript 会调用该数据类型的 toString() 方法。如果结果是一个原始数据类型,则直接返回该结果;否则,再调用该数据类型的 valueOf() 方法。如果最终结果还是不是原始数据类型,则抛出一个类型错误。

以下是一个类型转换的例子,演示了 JavaScript 在自动转换时的优先级顺序:

console.log(5 - "3"); // 2 (先把字符串 "3" 转换为数值 3,再与数字 5 相减)
console.log("5" * 3); // 15 (先把字符串 "5" 转换为数值 5,再与数字 3 相乘)
console.log("abc" - 1); // NaN (先把字符串 "abc" 转换为 NaN,再与数字 1 相减)
console.log("1" + 2); // "12" (先把数字 2 转换为字符串 "2",然后连接字符串 "1" 和字符串 "2",得到字符串 "12")
console.log(!"hello"); // false (先把字符串 "hello" 转换为布尔值 true,然后取反得到 false)

根据上面这些规则,我们可以更好地理解 JavaScript 中的自动类型转换。

4.3.5.5.== 与 ===

在进行 == 比较时, 如果两边的类型不同将进行自动转型

k 类型为 undefined 与 l 类型为 object 比较时 , 转数字, 转字符串, 都不可以

最终转成 boolean 都是 false , 所以 == 返回 true

var k;    // undefined
var l = null; // object
console.log( k == l )  // true
console.log( k === l )  // false

=== 是先判断 类型是否相同 , 不同直接 返回 false

在 下面的k 与 l 比较中 , 两都都是 object类型, 但一个是数组 一个是对象, 这时将它们转换成 字符串

[object Array][object Object] 所以返回 false

var k = [];
var l = {};
console.log(k == l) // false

4.3.6.object 对象

JS中很多都是object, 如: document 元素, new 得到的, 内置的对象等

var j1 = new String("hello")
console.log( typeof j1)  //object
var j2 = new Date();
console.log( typeof j2)  //object

var j3 = [1,2,3]
console.log( typeof j3)  //object
var j4 = {"name":"王小二", "age":12}
console.log( typeof j4)  //object

var j5 = document
console.log( typeof j5)  //object
var j6 = document.getElementById("inp")
console.log( typeof j6)  //object

4.3.7.function 函数

4.3.7.0.两种定义方式

函数类型有两种定义方式

function fn1(){
    console.log("fn1")
}
console.log( typeof fn1) // function

var fn2 = function(){
    console.log("fn2")
}
console.log( typeof fn2) // function

4.3.7.1.函数调用

function fn1(){
    console.log("fn1")
}
fn1();

fn2();
function fn2(){
    console.log("fn2")
}

使用 function 定义 函数是页面加载后, 优先解析

所以在页面的任何位置 都 可以调用

var fn1 = function() {
    console.log("fn1")
}
fn1();

fn2();
var fn2 = function() {
    console.log("fn2")
}

但 使用 var 定义的函数 是页面顺序解析

所以 fn1 可以正常调用 , 但 fn2 在调用时, 函数还没有定义,所以报 Uncaught TypeError: fn2 is not a function

4.3.7.2.函数同名

function fn(){
    console.log("fn1")
}
fn();
function fn(){
    console.log("fn2")
}

JS中 如果出现 同名函数, 后面的会覆盖前面的, 所以在控制台 打印 fn2

这里 可以这样理解 , function 是一种变量类型, 而 fn是 变量名, 为 fn 变量 赋值了两次, 后面的就会覆盖前面的

4.3.7.3.向函数传参

function fn(){
    console.log( arguments.length)
    for(var i=0; i<arguments.length; i++){
        console.log( arguments[i])
    }
}
fn(1,2,3,4)

JS 的函数中有 arguments 对象代表 参数数组

所以可以 通过 arguments 接收 调用时传递来的实参


http://www.niftyadmin.cn/n/369921.html

相关文章

Web基础 ( 八 ) 内置对象

4.3.8.Error try{ for(var i0;i<3;i){if(i2) throw new Error("i2");} }catch(e){console.error(e); }finally{console.log("错就错了吧"); }4.3.9.Math 全局对象&#xff0c;直接使用 console.log("Math.PI : ", Math.PI) // 圆…

哈希表(Hash Table)原理和代码

哈希表&#xff08;Hash Table&#xff09;是一种高效的数据结构&#xff0c;用于存储键-值对&#xff08;Key-Value pairs&#xff09;。它通过将键映射到数组的索引位置来实现快速的插入、查找和删除操作。哈希表的核心原理是使用哈希函数将键转换为对应的数组索引&#xff0…

【网络】- TCP/IP四层(五层)协议 - 网际层(网络层) - 路由控制

目录 一、概述二、路由表(Routing table)三、最长匹配、默认路由、特定主机路由四 、IP数据报路由过程五、路由聚合 一、概述 网际协议 IP 大致分为三大作用模块&#xff0c; ①IP寻址、 ②路由&#xff08;最终节点为止的转发&#xff09; 、③IP分包与组包。前面两篇文章讨论…

jacoco增量覆盖率平台开发

先聊聊做这个平台的意义&#xff0c;从项目管理角度来说&#xff0c;测试说项目测试完成&#xff0c;该如何证明呢&#xff1f;一般情况下我们进行验收时没什么问题就算完成了&#xff0c;但是实际上测试很多情况并没有考虑到。所以该平台可以反哺测试的测试用例&#xff0c;让…

如何在华为OD机试中获得满分?Java实现【IPv4地址转换成整数】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 存在一种虚拟 IPv4<

致敬科技工作者:我们的世界因你们而美好

在我们的日常生活中&#xff0c;科技无处不在&#xff0c;而这一切离不开科技工作者的辛勤付出。作为一名科技从业者&#xff0c;我深深地理解并感悟到&#xff0c;科技工作者们的作用是不可替代的。 二十一世纪&#xff0c;科技的发展日新月异。我们见证了第一台计算机的发明…

【Linux】线程互斥 与同步

文章目录 1. 背景概念多个线程对全局变量做-- 操作 2. 证明全局变量做修改时&#xff0c;在多线程并发访问会出问题3. 锁的使用pthread_mutex_initpthread_metux_destroypthread_mutex_lock 与 pthread_mutex_unlock具体操作实现设置为全局锁 设置为局部锁 4. 互斥锁细节问题5.…

Arduino 单片机程序中处理时间戳、时间溢出和延时问题

这个话题对其他单片机也适用&#xff0c;就是用来计时的变量万一溢出了该怎么整&#xff0c;类似那个经典的千年虫问题。实际上这个问题在日常生活中也很常见&#xff0c;比如&#xff0c;时钟上的小时最大值为23&#xff0c;从0 开始&#xff0c;每过24 小时归零一次&#xff…