JavaScript规定了几种语言类型?
JavaScript中的每一个值都有它自己的类型,JavaScript规定了七种语言类型:
1.Undefined
2.Null
3.Boolean
4.String
5.Number
6.Symbol
7.Object
Undefined和Null
:为什么有的编程规范要求用 void 0 代替 undefined?
undefined
undefined类型表示未定义,它的值只有一个:undefined 任何变量赋值前都是undefined类型,值为undefined(而不是null) undefined是一个变量,而非一个关键字 需要表达这个值,可以用全局变量undefined,或者void运算 undefined是一个变量,我们避免无意中被篡改,建议使用void 0来获取undefined(等价于void (0) )。我们一般不会把变量赋值为undefined,这样可以保证所有的值为undefined的变量,都是从未赋值的自然状态。
void运算
语法:void express 或者 void (express) void运算符所做的是,执行表达式express,然后不论表达式是否有返回值,一律返回undefined。 void运算符如果使用括号,括号内必须有表达式,如果是void()会被视为执行名为void的函数,报错:SyntaxError。
死链接
我们有时候会用href="#"来表示死链接,但是这样会导致页面跳到最上面的视图,#包含了一个位置信息,默认的锚是#top,也就是网页的上端。在页面很长的时候会使用#来定位页面的具体位置,格式为:#+id
href=javascript:void(0)用来禁止a标签的跳转行为,javascript:是伪协议,表示url的内容通过JavaScript执行,void(0)表示不作任何操作。
<a href="javascript: void(0)" onClick="window.open()"><!--点击链接后页面不动,只打开链接--> <a href="#" onClick="javascript: return false"><!--作用一样-->
Null
只有一个值,就是null 表示空值,是关键字,可以放心使用null关键字来获取null值
String string的意义并非“字符串”,而是字符串的UTF16编码,字符串的最大长度实际上是受字符串编码长度影响的。最大长度:253 - 1 。 字符串是永远无法变更的,一旦字符串被构造出来,无法用任何方式改变字符串的内容。 字符串把每个UTF16单元当做一个字符来处理,所以处理非BMP(超出 U+0000 - U+FFFF 范围)的字符时,应该格外小心。这个设计继承自Java,现实中很少用到BMP之外的字符。
Number
为什么在 JavaScript 中,0.1+0.2 不等于0.3?
number类型有264- 253+3 个值。 基本符合 IEEE 754-2008 规定的双精度浮点数规则,但也有额外几个表达的语言场景(比如不让除以0出错,引入了无穷大)。 NaN,占用了 9007199254740990,这原本是符合 IEEE 规则的数字 Infinity,无穷大 -Infinity,负无穷大 有+0和-0,加法运算中没有区别,但是除法要区分,“忘记检测除以 -0,而得到负无穷大”的情况经常会导致错误,而区分 +0 和 -0 的方式,正是检测 1/x 是 Infinity还是-Infinity 根据双精度浮点数定义,有效的整数范围是 -0x1fffffffffffff 至 0x1fffffffffffff,无法精确表示此范围外的整数。 根据双精度浮点数定义,非整数的Number类型无法用==来比较(三个等号也不行),正确的比较方法是用JavaScript提供的最小精度值:
console.log( 0.1 + 0.2 == 0.3);//false //正确的比较方法
console.log( Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON);//true
Symbol
表示独一无二的值,它是一切非字符串的对象key的集合。 Symbol 值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。 Symbol函数可以接受一个字符串作为参数,表示对 Symbol 实例的描述,但是即使描述相同,Symbol值也不相等。
let s1 = Symbol('foo'); let s2 = Symbol('foo');
s1 === s2 // false
一些标准中提到的 Symbol,可以在全局的 Symbol 函数的属性中找到。例如,我们可以使用 Symbol.iterator 来自定义 for…of 在对象上的行为: var o = new Object
o[Symbol.iterator] = function() {
var v = 0
return {
next: function() {
return { value: v++, done: v > 10 }
}
}
};
for(var v of o)
console.log(v); // 0 1 2 3 ... 9
Object
问题:为什么给对象添加的方法能用在基本类型上?
JavaScript对象的定义是“属性的集合”。属性分为数据属性和访问器属性,二者都是 key-value 结构,key可以是字符串或者Symbol类型。 JavaScript的“类”仅仅是运行时对象的一个私有属性,而JavaScript中是无法自定义类型的。 Number、String 和 Boolean,三个构造器是两用的,当跟 new 搭配时,它们产生对象,当直接调用时,它们表示强制类型转换。 Symbol 函数比较特殊,直接用 new 调用它会抛出错误,但它仍然是Symbol对象的构造器。 我们在原型上添加方法,都可以应用于基本类型。 Symbol.prototype.hello = () => console.log("hello");
var a = Symbol("a");
console.log(typeof a); //symbol,a 并非对象
a.hello(); //hello,有效
上述问题的答案是:运算符提供了装箱操作,它会根据基础类型构造一个临时对象,使得能够在基础类型上调用对应对象的方法。
装箱和拆箱
装箱转换:基本类型–>对象
每一种基本类型,都在对象中有对应的类,装箱机制会频繁产生临时对象。 使用object函数,可以显示调用装箱能力。 每一类装箱对象皆有私有的 Class 属性,这些属性可以Object.prototype.toString 获取。在 JavaScript 中,没有任何方法可以更改私有的Class 属性,因此 Object.prototype.toString 是可以准确识别对象对应的基本类型的方法,它比 instanceof 更加准确。 call函数本身会产生装箱操作,需要配合typeof来区分基本类型还是对象类型。 拆箱转换:对象–>基本类型
ToPrimitive 函数,它是对象类型到基本类型的转换 拆箱转换会尝试调用 valueOf 和 toString 来获得拆箱后的基本类型。如果valueOf 和 toString都不存在,或者没有返回基本类型,则会产生TypeError。 对象的运算
var o = {
valueOf : () => {console.log("valueOf"); return {}},
toString : () => {console.log("toString"); return {}}
}
o * 2
// valueOf
// toString
// TypeError
String的拆箱
var o = {
valueOf : () => {console.log("valueOf"); return {}},
toString : () => {console.log("toString"); return {}}
}
o + ""
// toString
// valueOf
// TypeError
原文:https://blog.csdn.net/zhenghaohan1999/article/details/86697162

JavaScript规定了几种语言类型?的更多相关文章
- javascript常见的几种事件类型
第一种事件类型:onchange() <body> <select id="sheng" onchange="fn1();"> < ...
- TypeScript和JavaScript哪种语言更先进
TypeScript和JavaScript哪种语言更先进 近两年来最火爆的技术栈毫无争议的是JavaScript,随着ES6的普及,不管是从前端的浏览器来看,还是后端的NodeJS场景,JavaScr ...
- 30个深度学习库:按Python、C++、Java、JavaScript、R等10种语言分类
30个深度学习库:按Python.C++.Java.JavaScript.R等10种语言分类 包括 Python.C++.Java.JavaScript.R.Haskell等在内的一系列编程语言的深度 ...
- Delphi中定义了四种布尔类型:Boolean,ByteBool,WordBool和LongBool。后面三种布尔类型是为了与其他语言兼容而引入的
bool是LongBool类型. Delphi中定义了四种布尔类型:Boolean,ByteBool,WordBool和LongBool.后面三种布尔类型是为了与其他语言兼容而引入的,一般情况下建议使 ...
- Go 语言中的数组是一种 值类型(不像 C/C++ 中是指向首元素的指针)
the-way-to-go_ZH_CN/07.1.md at master · Unknwon/the-way-to-go_ZH_CN https://github.com/Unknwon/the-w ...
- 28 JavaScript语言类型&运算符
语言类型: 弱类型:可以改变变量值和对象类型 强类型:可以改变变量值不能改变对象类型 解释型:边编译边执行,速度慢.解释型一般是弱类型 编译型:先编译再执行(C++\Java),速度快.编译型一般是强 ...
- HMS Core 机器学习服务6.4.0版本更新啦,文本翻译功能增加10种小语种语言类型!
近日,HMS Core机器学习服务(ML Kit)文本翻译功能在6.4.0版本更新中增加了10种小语种语言类型,分别是马其他语.马其顿.冰岛.乌尔都语.波斯尼亚语.乌克兰语.加泰罗尼亚语.斯洛文尼亚语 ...
- JavaScript 中的数字和日期类型
本章节介绍如何掌握Javascript里的数字和日期类型 数字EDIT 在 JavaScript 里面,数字都是双精度浮点类型的 double-precision 64-bit binary form ...
- Python的语言类型
Python 是强类型的动态脚本语言 . 强类型:不允许不同类型相加 动态:不使用显示数据类型声明,且确定一个变量的类型是在第一次给它赋值的时候 脚本语言:一般也是解释型语言,运行代码只需要一个解释器 ...
随机推荐
- VS2017 Linux 上.NET Core调试
调试Linux 上.NET Core Visual Studio 2017 通过SSH 调试Linux 上.NET Core 应用程序. 本文环境 开发环境:Win10 x64 Visual Stud ...
- 对XAML进行编辑的辅助类(XamlHelper)
原文:对XAML进行编辑的辅助类(XamlHelper) // XamlHelper.cs// --------------------------------------------// 对XAML ...
- UML该元素的行为为基础的元素
Behavioral thingsare the dynamic parts of UML models. These are the verbs of a model, representin ...
- Harden the Hacker Thinking (Updating)
录制自己的最新思考harden过程.通过记录,反射,加强管理,发现缺陷. 等一下design,等一下coding,三十分钟rethinking. 2015-02-26 : 不要在一件事上停留太久: 歇 ...
- 系统引导文件之 boot.ini(有很多参数)
Windows NT类的操作系统,也就是Windows NT/2000/XP中,有一个特殊文件,也就是“BOOT.INI”文件,这个文件会很轻松地按照我们的需求设置好多重启动系统. “BOOT.INI ...
- StackLayout
堆栈式地放置内容可以在xaml中完成视图,也可以在cs代码中完成视图 Xamarin的所有视图和布局都是可以 1.在xaml中完成 2.在cs代码中完成视图 (类比WPF) 示例 在cs代码中完成视图 ...
- zendframework 初始化配置
https://framework.zend.com/manual/2.4/en/tutorials/config.advanced.html#environment-specific-system- ...
- 用MVVM模式开发中遇到的零散问题总结(4)——自制摄像头拍摄大头贴控件
原文:用MVVM模式开发中遇到的零散问题总结(4)--自制摄像头拍摄大头贴控件 一直有个疑问,为什么silverlight对摄像头支持这么好,WPF却一个库都没有....于是我各种苦恼啊,各种Code ...
- 【C#】wpf自定义calendar日期选择控件的样式
原文:[C#]wpf自定义calendar日期选择控件的样式 首先上图看下样式 原理 总览 ItemsControl内容的生成 实现 界面的实现 后台ViewModel的实现 首先上图,看下样式 原理 ...
- 【WPF】右下角弹出自定义通知样式(Notification)——简单教程
原文:[WPF]右下角弹出自定义通知样式(Notification)--简单教程 1.先看效果 2.实现 1.主界面是MainWindow 上面就只摆放一个Button即可.在Button的点击事件中 ...