夯实Javascript基础。

基本类型有六种: null,undefined,boolean,number,string,symbol。

基本类型的值是保存在栈内存中的简单数据段

基础类型特性

基础类型最重要的特性

  • 基础类型是不变的

    • 因此:基础类型没有splice,sort之类的直接改变变量的方法
    • 强行改变基础类型会报错
      // str 不能调用 Array的 sort 和 splice
    
      Array.prototype.sort.call('strxyz');
    // Uncaught TypeError: Cannot assign to read only property '2' of object '[object String]' Array.prototype.splice.call('strxyz');
    // Uncaught TypeError: Cannot assign to read only property 'length' of object '[object String]' // object 可以使用 Array的sort 和 splice Array.prototype.sort.call({x: 1, y: 2});
    // {x: 1, y: 2} Array.prototype.splice.call({x: 1, y: 2});
    // []
  • 基础类型没有__proto__没有属性
      str.x = 1;
    console.log(str.x); // undefined
  • 所有对基础类型属性的访问都是访问的基本包装类型 (String、Number、Boolean)
      当你调用 `str.length` 时,实际过程是这样的:
    - 创建String类型的一个实例
    - 在实例上调用指定的方法
    - 销毁这个实例 var str = 'abc';
    var _str = new String(str);
    var len = _str.length;
    _str = null;
    console.log(len);

其他特性

  • typeof null === 'object'

    • (历史遗留问题,因为000开头表示对象,而null全是0)
  • 条件判断时 undefined null false NaN '' 0 -0 为 false,其他都为 true
    • (条件判断时会隐式转换为Boolean)
  • JS只有浮点类型(double),没有整型
    • 1 === 1.0
  • NaN 也属于 number 类型,并且 NaN 不等于自身。
    • var a = NaN; a !== a;
  • String 类型是类数组,具有iterator
    • typeof String('x')[Symbol.iterator] === 'function'

基础类型检测

检测基础类型用 typeof

  // typeof 只适合检测 基础类型

  typeof new Date() // 'object'
typeof [] // 'object'
typeof {} // 'object'
typeof console.log // 'function'

基础类型转换

基本类型转换时,首先会调用 valueOf,然后调用 toString。并且这两个方法可以重写。

  var a = 1;

  var obj = {x: 1};
obj.toString === '[object Object]'; var arr = [2, 3];
arr.toString() === '2,3'; a + obj === '1[object Object]';
a + arr === '12,3';

Symbol.toPrimitive该方法在转基本类型时调用优先级最高。

  let a = {
valueOf() {
return 1;
},
toString() {
return '2';
},
[Symbol.toPrimitive]() {
return 3;
}
} 1 + a // => 4

四则运算

  • 在四则运算中,除了'+' 其他操作都会以数字进行计算
  • 如果是 + 运算,如果不是所有字面量都是number,那么会转换为字符串(toString)进行拼接

End

持续更新中,Github信息更多哦,你的⭐是我最大的支持。查看详情

你真的懂JavaScript基础类型吗的更多相关文章

  1. JavaScript 基础类型,数据类型

    1.基础类型:undefined,null,Boolean,Number,String,Symbol Undefined类型:一个没有被赋值的变量会有个默认值undefined; Null类型:nul ...

  2. JavaScript内部原理实践——真的懂JavaScript吗?(转)

    通过翻译了Dmitry A.Soshnikov的关于ECMAScript-262-3 JavaScript内部原理的文章, 从理论角度对JavaScript中部分特性的内部工作机制有了一定的了解. 但 ...

  3. 踩过了这些坑,你真的懂python基础吗?

    一.浮点数的计算 思考1:打印结果是什么? a = 0.1 b = 0.2 c = 0.3 print(b == a + a) 思考2:打印结果是什么? a = 0.1 b = 0.2 c = 0.3 ...

  4. 你真的懂javascript中的 “this” 吗?

    一.前言: 我们知道 "this" 是javascript语言的一个关键字,在编写javascript代码的时候,经常会见到或者用到它. 但是,有一部分开发朋友,对 "t ...

  5. Javascript基础回顾 之(一) 类型

    本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...

  6. 玩转JavaScript OOP[0]——基础类型

    前言 long long ago,大家普遍地认为JavaScript就是做一些网页特效的.处理一些事件的.我身边有一些老顽固的.NET程序员仍然停留在这种认知上,他们觉得没有后端开发肯定是构建不了系统 ...

  7. javascript的语法作用域你真的懂了吗

    原文:javascript的语法作用域你真的懂了吗 有段时间没有更新了,思绪一下子有点转不过来.正应了一句古话“一天不读书,无人看得出:一周不读书,开始会爆粗:一月不读书,智商输给猪.”.再加上周五晚 ...

  8. JavaScript基础回顾一(类型、值和变量)

    请看代码并思考输出结果 var scope = 'global'; function f(){ console.log(scope); var scope = 'local'; console.log ...

  9. JavaScript学习 - 基础(二) - 基础类型/类型转换

    基础类型 - 数字类型(Number) 1.最基本的数据类型 2.不区分整型数值和浮点型数值 3.所有数字采用64位浮点格式存储,相当于Java和C语言中double格式 4.能表示的最大值 +- 1 ...

随机推荐

  1. linux安装nvm node版本管理器 nvm常用命令 部署node服务器环境

    1,nvm git地址点击打开链接,安装命令 curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh ...

  2. Linux V4L2之camera

    一.硬件知识 1. 摄像头硬件结构和工作原理,如图1&图2 外部光线穿过lens镜头,经过红外滤光片后光学图像投射到传感器上,然后光学图像被转换成电信号,电信号再经过模数转换变为数字信号,数字 ...

  3. ASP.NET三层架构项目创建流程

    1.进入VS2010,新建项目—>Visual C#—>Web—>ASP.NET空Web应用程序,如图所示: 2.在解决方案处右击—>新建项目—>Windows—> ...

  4. c# 接口相同方法申明使用

    using System; namespace ConsoleApp1 { interface IInterface1 { void ft(); } interface IInterface2 { v ...

  5. java程序调用CMD命令启动tomcat替换环境变量

    出现问题: 此时不应有 Files\Java\jdk1.8.0_92\bin\java.exe""(本地未出现问题,服务器环境出现) 出现原因: 1:环境变量JAVA_HOME配置 ...

  6. Java多线程与并发之面试常问题

    JAVA多线程与并发 进程与线程的区别 进程是资源分配的最小单位,线程是CPU调度的最小单位 所有与进程相关的资源,都被记录在PCB(进程控制块)中 进程是抢占处理机的调度单位:线程属于某个进程,共享 ...

  7. 如何只在IE上加载CSS样式表

    前言:IE一直是特殊的一个浏览器,我们可以使用一些方法来指定样式表只在IE浏览器下被加载. IE9以及低于IE9版本 : 可以使用条件注释语句来加载特定于ie的样式表.如下所示,使用外部css3样式表 ...

  8. arcgis api 3.x for js 地图加载多个 SHP 图层压缩以及 json 文件展示(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  9. GDAL读取的坐标起点在像素左上角还是像素中心?

    目录 1. 问题 2. 结论 3. 例外 1. 问题 笔者在处理地理栅格数据的时候,总是会发生偏差半个像素的问题. 比如说通过ArcMap打开一张.tif,查看其地理信息:同时用记事本打开.tfw,比 ...

  10. SQL优化--inner、left join替换in、not in、except

    新系统上线,用户基数16万,各种查询timeout.打开砂锅问到底,直接看sql语句吧,都是泪呀,一大堆in\not in\except.这里总结一下,怎么替换掉in\not in\except. 1 ...