Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

《你不知道的Javascript》2:类型和语法 #58

Open
shinena opened this issue Feb 22, 2023 · 3 comments
Open

《你不知道的Javascript》2:类型和语法 #58

shinena opened this issue Feb 22, 2023 · 3 comments

Comments

@shinena
Copy link
Owner

shinena commented Feb 22, 2023

类型

Javascript有七种内置类型,null、undefined、number、string、boolean、symbol(es6新增)和object。除object之外,都是基本数据类型。可以使用typeof运算符查看,typeof返回的是一个字符串。

变量没有类型,只有值。他们持有的值有类型。类型定义了值的行为特征。

undefined是值的一种。undeclared则表示变量还没有声明过。typeof对两个变量都返回undefined。

@shinena shinena changed the title ### 类型 《你不知道的Javascript》2 Feb 22, 2023
@shinena
Copy link
Owner Author

shinena commented Feb 22, 2023

JavaScript中的数组是通过数字索引的一组任意类型的值。字符串和数字类似,但是行为特征不同。
JavaScript中的数字包括“整数”和”浮点型“。

基本类型中定义了几个特殊的值:

  • null类型只有一个值null;
  • undefined类型也只有一个值undefined;
  • 所有变量在赋值之前默认值都是undefined;
  • void运算符返回undefined;

数字类型有几个特殊的值:NaN(not a number)、+Infinity、-Infinity和 -0。

简单标量基本类型值(字符串和数字等)通过值复制来赋值/传递,而复合值(对象等)通过引用复制来赋值/传递。
Javascript中的引用和其他语言中的引用/指针不同,它们不能指向别的变量/引用,只能指向值。

@shinena
Copy link
Owner Author

shinena commented Feb 22, 2023

原生函数

JavaScript的内建函数,也叫原生函数
常用的原生函数有:

  • String()
  • Number()
  • Boolean()
  • Array()
  • Object()
  • Function()
  • RegExp()
  • Date()
  • Error()
  • Symbol()——ES6中新加入的!

Javascript为基本类型值提供了封装对象,称为原生函数。它们为基本数据类型值提供了该子类型所特有的方法和属性。
对于简单标量基本类型值,如果要访问它的length属性或String.prototype方法,Javascript引擎会自动对该值进行封装来实现对这些属性和方法的访问。

@shinena
Copy link
Owner Author

shinena commented Feb 22, 2023

强制类型转换
1.值类型转换

2.抽象值操作
toString()
toNumber()

true---1 false---0 undefined---NaN null---0
对字符串的处理基本遵循数字常量的相关规则/语法。处理失败时返回NaN。
对象(包括数组)会首先被转换为相应的基本类型值,如果返回的是非数字的基本类型值,则再遵循以上规则将其强制转换为数字。
为了将值转换为相应的基本类型值,抽象操作toPrimitive会首先检查该值是否有valueof()方法。如果有并且返回基本类型值,就使用该值进行强制类型转换。如果没有就使用toString()的返回值进行强制类型转换。如果valueof()和toString()均不返回基本类型值,会产生TypeError错误。

toBoolean()
假值

  • undefined
  • null
  • false
  • +0、-0、NaN
  • “”

假值的布尔强制类型转换结果为false。
假值列表以外的都是真值

显式强制类型转换

隐式强制类型转换(是其他操作的副作用)
[] + {} // "[object object]"
{} + [] // 0

||和&& 逻辑运算符(选择器运算符)
&&优先级高于||

宽松相等和严格相等
==允许在相等比较中进行强制类型转换,===不允许。

假值的相等比较

@shinena shinena changed the title 《你不知道的Javascript》2 《你不知道的Javascript》2:类型和语法 Feb 23, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant