当前位置:首页>学习笔记>学习笔记:JS中的类型转换

学习笔记:JS中的类型转换

  • 2026-02-10 01:11:22
学习笔记:JS中的类型转换

加法类型转换

在JavaScript中,加法的规则其实很简单,只有两种情况:

  • 数字和数字相加
  • 字符串和字符串相加

所有其他类型的值都会被自动转换成这两种类型的值

在JavaScript中,一共有两种类型的值:

  • 原始值有:undefinednull、 布尔值(Boolean)、 数字(Number)、字符串(String)、Symbol
  • 对象值:其他的所有值都是对象类型的值,包括数组(arrays)和函数(functions)

基本类型(基本数值、基本数据类型)是一种既非对象也无方法的数据。在 JavaScript 中,共有7种基本类型:stringnumberbigintbooleannullundefinedsymbol加法运算符会触发三种类型转换:将值转换为原始值、转换为数字、转换为字符串,这刚好对应了JavaScript引擎内部的三种抽象操作:

  • ToPrimitive()
  • ToNumber()
  • ToString()

通过 ToPrimitive() 将值转换为原始值

ToPrimitive(input, PreferredType?)

可选参数PreferredType可以是Number或者String它只代表了一个转换的偏好,转换结果不一定必须是这个参数所指的类型,但转换结果一定是一个原始值。如果PreferredType被标志为Number,则会进行下面的操作来转换输入的值:

  1. 如果输入的值已经是个原始值,则直接返回它。
  2. 否则,如果输入的值是一个对象。则调用该对象的valueOf()方法。如果valueOf()方法的返回值是一个原始值,则返回这个原始值。
  3. 否则,调用这个对象的toString()方法。如果toString()方法的返回值是一个原始值,则返回这个原始值。
  4. 否则,抛出TypeError异常。

如果PreferredType被标志为String,则转换操作的第二步和第三步的顺序会调换。如果没有PreferredType这个参数,则PreferredType的值会按照这样的规则来自动设置: Date类型的对象会被设置为String,其它类型的值会被设置为Number

通过 ToNumber() 将值转换为数字

「参数」「结果」
undefinedNaN
null+0
布尔值
true被转换为 1,false转换为0
数字
无需转换
字符串
由字符串解析为数字。例如:"324"被转换为324

如果输入的值是一个对象,则会首先会调用ToPrimitive(obj, Number)将该对象转换为原始值,然后在调用ToNumber()将这个原始值转换为数字。

通过 ToString() 将值转换为字符串

「参数」「结果」
undefined"undefined"
null"null"
布尔值
"true" 或者"false"
数字
数字作为字符串,比如。 "1.765"
字符串
无需转换

如果输入的值是一个对象,则会首先会调用ToPrimitive(obj, String)将该对象转换为原始值,然后再调用ToString()将这个原始值转换为字符串。

减法类型转换

在JavaScript中,减法的规则核心是「统一转换为数字进行运算」,不存在“字符串减法”的情况——无论参与运算的值是什么类型,最终都会被转换为数字后再执行减法操作。

在JavaScript中,一共有两种类型的值:

  • 原始值有:undefined、null、 布尔值(Boolean)、 数字(Number)、字符串(String)、Symbol
  • 对象值:其他的所有值都是对象类型的值,包括数组(arrays)和函数(functions)

基本类型(基本数值、基本数据类型)是一种既非对象也无方法的数据。在 JavaScript 中,共有7种基本类型:string,number,bigint,boolean,null,undefined,symbol

减法运算符仅触发两种类型转换:将值转换为原始值、转换为数字,这对应了JavaScript引擎内部的两种抽象操作:

  • ToPrimitive()
  • ToNumber()

注意:减法运算「不会触发ToString()」 转换,这是与加法最核心的区别(加法可能触发字符串拼接)。

通过 ToPrimitive() 将值转换为原始值

ToPrimitive(input, PreferredType?) 可选参数PreferredType可以是Number或者String,它只代表了一个转换的偏好,转换结果不一定必须是这个参数所指的类型,但转换结果一定是一个原始值。

对于减法运算来说,无论输入值是否为Date类型,PreferredType都会被「强制设置为Number」(这也是与加法的关键差异:加法中Date类型的PreferredType为String),因此转换流程固定为:

  1. 如果输入的值已经是个原始值,则直接返回它。
  2. 否则,如果输入的值是一个对象,则调用该对象的valueOf()方法。如果valueOf()方法的返回值是一个原始值,则返回这个原始值。
  3. 否则,调用这个对象的toString()方法。如果toString()方法的返回值是一个原始值,则返回这个原始值。
  4. 否则,抛出TypeError异常。

通过 ToNumber() 将值转换为数字

减法运算中,所有原始值最终都会通过ToNumber()转换为数字,转换规则如下:

参数
结果
undefined
NaN
null
+0
布尔值
true被转换为 1,false转换为0
数字
无需转换
字符串
由字符串解析为数字。例如:"324"被转换为324;"12a"被转换为NaN;空字符串""被转换为+0
Symbol
抛出TypeError异常(Symbol无法转换为数字)

如果输入的值是一个对象,则会首先调用ToPrimitive(obj, Number)将该对象转换为原始值,然后再调用ToNumber()将这个原始值转换为数字。

减法运算的具体执行示例

示例1:原始值之间的减法

// 数字 - 数字:直接运算10 - 5// 5// 布尔值 - 数字:布尔值先转数字true - 1// 1 - 1 = 0false - 2// 0 - 2 = -2// 字符串 - 数字:字符串先转数字"100" - 20// 100 - 20 = 80"12a" - 5// NaN - 5 = NaN"" - 1// 0 - 1 = -1// undefined/null 参与减法undefined - 1// NaN - 1 = NaNnull - 5// 0 - 5 = -5// Symbol 参与减法(报错)Symbol('a') - 1// Uncaught TypeError: Cannot convert a Symbol value to a number

示例2:对象参与减法

// 数组参与减法:先ToPrimitive再ToNumber[10] - 3// 10 - 3 = 7(数组valueOf返回自身,toString返回"10",转数字为10)[1,2] - 5// NaN("1,2"转数字为NaN)[] - 2// 0 - 2 = -2(空数组toString返回"",转数字为0)// 普通对象参与减法({}) - 10// NaN(对象toString返回"[object Object]",转数字为NaN)({valueOf: () => 20}) - 5// 20 - 5 = 15(自定义valueOf返回原始值)

示例3:特殊值的减法

// NaN参与减法:结果恒为NaN10 - NaN// NaNNaN - NaN// NaN// +0和-0的减法+0 - (-0); // 0-0 - +0// 0

减法与相等性判断的关联

减法运算的类型转换逻辑,与相等性判断中==的转换逻辑高度一致(尤其是对象/原始值转换为数字的规则):

  • 当使用==比较数字与非数字类型时,非数字类型会先转数字(与减法的ToNumber规则相同);
  • 当对象参与==比较时,会先通过ToPrimitive(obj, Number)转原始值(与减法的对象转换规则相同);
  • 严格相等===不会触发任何隐式转换,这也是为什么在判断减法运算结果时,推荐使用===
// 避免隐式转换导致的误判(10 - "0") === 10// true(明确的数字比较)(10 - "0") == "10"// true("10"转数字后比较)

总结

  1. JS减法运算的核心规则是「所有参与运算的值最终都会转换为数字」,不会触发字符串拼接(与加法本质区别)。
  2. 对象参与减法时,先通过ToPrimitive(obj, Number)转为原始值,再通过ToNumber()转为数字;Symbol类型参与减法会直接报错。
  3. 减法的类型转换规则与==的转换逻辑一致,但判断减法结果时推荐使用===(严格相等)避免隐式转换误判。

相等性判断

ES2015中有四种相等算法:

  • 抽象(非严格)相等比较 (==)
  • 严格相等比较 (===): 用于 Array.prototype.indexOfArray.prototype.lastIndexOf, 和 casematching
  • 同值零: 用于 %TypedArray% 和 ArrayBuffer构造函数、以及MapSet操作, 并将用于 ES2016/ES7 中的String.prototype.includes
  • 同值: 用于所有其他地方

JavaScript提供三种不同的值比较操作:

  • 严格相等比较 (也被称作“strict equality”, “identity”, “triple equals”),使用 === ,
  • 抽象相等比较 (“loose equality”,“double equals”) ,使用 ==
  • 以及 Object.is (ECMAScript 2015/ ES6 新特性)

严格相等===

全等操作符比较两个值是否相等,两个被比较的值在比较前都不进行隐式转换。如果两个被比较的值具有不同的类型,这两个值是不全等的。否则,如果两个被比较的值类型相同,值也相同,并且都不是 Number 类型时,两个值全等。最后,如果两个值都是 Number 类型,当两个都不是 NaN,并且数值相同,或是两个值分别为 +0 和 -0 时,两个值被认为是全等的。

在日常中使用全等操作符几乎总是正确的选择。对于除了数值之外的值,全等操作符使用明确的语义进行比较:一个值只与自身全等。对于数值,全等操作符使用略加修改的语义来处理两个特殊情况:第一个情况是,浮点数 0 是不分正负的,全等操作符认为这两个值是全等的。第二个情况是,全等操作符认为 NaN 与其他任何值都不全等,包括它自己。(等式 (x !== x) 成立的唯一情况是 x 的值为 NaN

非严格相等==

一些总结规律:

  • undefined 与 null 互相相等,与其他值为false
  • NumberString/Boolean比较时,后者将会被转化ToNumber;与对象进行比较时,后者将会被转化ToPrimitive
  • StringNumber/Boolean比较时,均转换ToNumber;与对象比较时,后者将被转换ToPrimitive
  • BooleanNumber/String比较时,与上例相同
  • ObjectNumber/String/Boolean比较时,前者将被转换ToPrimitiveBoolean被转换ToNumber

同值相等

Object.is方法提供

JS 圣经图

JS 中的特殊值深度解析

在 JavaScript 中,nullundefinedNaN+0/-0Infinity 等特殊值是语言设计的重要组成部分,也是新手最容易混淆的知识点。这些值看似简单,但理解它们的「类型本质」「转换规则」「使用场景」,是写出健壮 JS 代码的关键。

一、核心特殊值的基础定义与类型

先明确每个特殊值的「身份」—— 类型归属是理解它们的第一步:

特殊值
类型(typeof 结果)
归属(原始值/对象)
核心含义
undefined
"undefined"
原始值
「未定义」:变量声明但未赋值
null
"object"(历史bug)
原始值
「空值」:主动表示“无/空”
NaN
"number"
原始值
「非数字」:数字运算的无效结果
+0 / -0
"number"
原始值
「正负零」:数字的特殊表示
Infinity
"number"
原始值
「无穷大」:超出数字范围的结果
-Infinity
"number"
原始值
「负无穷大」
Symbol
"symbol"
原始值
「唯一标识」:ES6 新增,无字面量特殊值但本身是特殊类型

关键提醒:typeof null === "object" 是 JS 设计之初的历史 Bug(底层用 32 位存储值,前 3 位为 0 则判定为 object,null 的所有位都是 0),但 null 本质是「原始值」,不是对象。

二、逐个拆解核心特殊值

1. undefined:「被动」的未定义

「核心特性」

  • 「产生场景」(被动出现,而非主动赋值):

    1. 变量声明但未赋值:let a; console.log(a); // undefined
    2. 函数无返回值时的默认返回:function fn() {}; console.log(fn()); // undefined
    3. 对象访问不存在的属性:const obj = {name: '张三'}; console.log(obj.age); // undefined
    4. 函数参数未传递:function fn(x) {console.log(x);}; fn(); // undefined
  • 「类型转换规则」

    • 转数字(ToNumber):Number(undefined) // NaN
    • 转字符串(ToString):String(undefined) // "undefined"
    • 转布尔值(ToBoolean):Boolean(undefined) // false
  • 「相等性判断」

undefined == null// true(仅这一对特殊相等)undefined === null// false(类型不同)undefined === undefined// true

「最佳实践」

  • 不要主动给变量赋值 undefined(比如 let a = undefined),如需表示「空」,优先用 null
  • 判断变量是否未赋值:用 typeof a === "undefined"(避免变量未声明时报错)。

2. null:「主动」的空值

「核心特性」

  • 「产生场景」(主动赋值,表示“无/空引用”):

    1. 手动表示变量无值:let user = null; // 表示当前无用户数据
    2. 函数返回值表示“无结果”:function findUser() { return null; }
    3. 清空对象引用:let obj = {a:1}; obj = null; // 释放引用
  • 「类型转换规则」

    • 转数字(ToNumber):Number(null) // 0
    • 转字符串(ToString):String(null) // "null"
    • 转布尔值(ToBoolean):Boolean(null) // false
  • 「相等性判断」

null == undefined; // truenull === undefined; // falsenull === null; // truenull == 0; // false(易错点:null转数字是0,但==不会把null转数字)

「关键区别(null vs undefined)」

维度
undefined
null
语义
被动:“未定义”
主动:“空值”
赋值场景
无需手动赋值
手动赋值表示“无”
转数字结果
NaN
0
== 0 的结果
false
false

3. NaN:非数字(Not a Number)

核心特性

  • 「产生场景」(数字运算的无效结果):

    1. 字符串转数字失败:Number("12a") // NaNparseInt("abc") // NaN
    2. 无效数学运算:0 / 0Math.sqrt(-1)10 - "abc"
    3. NaN 参与任何数字运算:NaN + 10 // NaNNaN * 5 // NaN
  • 「核心陷阱」NaN 是唯一「不等于自身」的值:

NaN === NaN; // false(易错点!)NaN == NaN; // false
  • 「正确判断 NaN 的方法」

    1. ES6 推荐:Number.isNaN(值)(严格判断,仅当值是 NaN 且类型为 number 时返回 true);
    2. 传统方法:Object.is(值, NaN)
    3. 不推荐:isNaN(值)(会先将值转数字,比如 isNaN("abc") // true,易误判)。
  • 「类型转换规则」

    • 转字符串(ToString):String(NaN) // "NaN"
    • 转布尔值(ToBoolean):Boolean(NaN) // false

4. +0 / -0:正负零

「核心特性」

  • 「产生场景」

    1. 数学运算:1 / Infinity // +0-1 / Infinity // -0
    2. 类型转换:Number("-0") // -0null - 0 // +0
    3. 直接赋值:let a = -0;
  • 「相等性判断」

+0 === -0// true(=== 认为正负零相等)Object.is(+0, -0); // falseObject.is 严格区分)
  • 「实际影响」: 大部分场景下正负零无区别,但涉及「符号敏感」的运算时会体现差异:
1 / +0; // Infinity1 / -0; // -InfinityObject.is(1/+01/-0); // false

5. Infinity / -Infinity:无穷大

「核心特性」

  • 「产生场景」

    1. 超出数字范围:1 / 0 // Infinity-1 / 0 // -Infinity
    2. 大数运算:Math.pow(10, 1000) // Infinity
    3. 直接赋值:let a = Infinity;
  • 「运算规则」

Infinity + 100// InfinityInfinity - Infinity// NaN(无效运算)100 / Infinity// 0Infinity * 0// NaN

三、特殊值的常见陷阱与避坑指南

陷阱 1:== 的隐式转换导致误判

// 易错案例undefined == 0// false(undefined转数字是NaN,NaN≠0)null == 0// false(null不会转数字参与==比较)"" == 0// true(空字符串转数字是0)false == 0// true(false转数字是0)

「避坑」:优先使用 ===(严格相等),仅在明确需要隐式转换时使用 ==

陷阱 2:判断 NaN 用 ===

// 错误写法if (result === NaN) { ... } // 永远为false// 正确写法if (Number.isNaN(result)) { ... }

陷阱 3:typeof null 误判为 object

// 正确判断null的方法function isNull(value) {  return value === null// 直接用===,最可靠}

陷阱 4:Symbol 类型的特殊性

Symbol 作为原始值,无法转换为数字(会报错),转换为字符串需要手动调用 toString()

Symbol('a') - 1// Uncaught TypeErrorString(Symbol('a')); // "Symbol(a)"Symbol('a').toString(); // "Symbol(a)"

四、特殊值的实用判断函数

整理了日常开发中常用的「特殊值判断」工具函数,可直接复用:

// 判断是否为undefinedfunction isUndefined(value) {  return typeof value === 'undefined';}// 判断是否为nullfunction isNull(value) {  return value === null;}// 判断是否为null/undefined(空值)function isNil(value) {  return value === null || typeof value === 'undefined';}// 严格判断是否为NaNfunction isNaNValue(value) {  return Number.isNaN(value);}// 判断是否为有效数字(排除NaN/Infinity/-Infinity)function isNumber(value) {  return typeof value === 'number' && !Number.isNaN(value) && isFinite(value);}

总结

  1. undefined 是「被动未定义」,null 是「主动空值」,二者 == 相等但 === 不相等,转数字结果分别为 NaN 和 0;
  2. NaN 是唯一不等于自身的值,判断需用 Number.isNaN(),而非 ===
  3. +0/-0 在 === 下相等,但 Object.is() 严格区分,仅在符号敏感运算中体现差异;
  4. 避坑核心:优先使用 === 避免隐式转换,用专用方法判断特殊值(如 Number.isNaN())。
点点【👍赞】和【❤️推荐】👇

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-11 17:20:56 HTTP/2.0 GET : https://67808.cn/a/462302.html
  2. 运行时间 : 0.083965s [ 吞吐率:11.91req/s ] 内存消耗:4,556.82kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=2cf29b556c7e468f278603c4c0e076ac
  1. /yingpanguazai/ssd/ssd1/www/no.67808.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/no.67808.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/no.67808.cn/runtime/temp/6df755f970a38e704c5414acbc6e8bcd.php ( 12.06 KB )
  140. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000605s ] mysql:host=127.0.0.1;port=3306;dbname=no_67808;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000886s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000386s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000279s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000536s ]
  6. SELECT * FROM `set` [ RunTime:0.000182s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000547s ]
  8. SELECT * FROM `article` WHERE `id` = 462302 LIMIT 1 [ RunTime:0.004992s ]
  9. UPDATE `article` SET `lasttime` = 1770801656 WHERE `id` = 462302 [ RunTime:0.001391s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 65 LIMIT 1 [ RunTime:0.000225s ]
  11. SELECT * FROM `article` WHERE `id` < 462302 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000436s ]
  12. SELECT * FROM `article` WHERE `id` > 462302 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000383s ]
  13. SELECT * FROM `article` WHERE `id` < 462302 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002213s ]
  14. SELECT * FROM `article` WHERE `id` < 462302 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000888s ]
  15. SELECT * FROM `article` WHERE `id` < 462302 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001468s ]
0.085705s