类型、值和变量(二)

在上一篇笔记中,主要是说明了原始值的相关细节。本篇笔记主要内容是简要地介绍一下对象,js的类型转换。

(一)全局对象和包装对象

/* 全局对象 */

1. 什么是全局对象:

(1)当JavaScript解释器启动时(或者Web浏览器加载新的页面时),将会创建一个新的全局对象,这个全局对象会被定义一组初始属性,包括全局属性,全局对象,全局函数,构造函数;

(2)全局对象的初始属性并不属于保留字,但是应该当做保留字来对待;

2. 全局对象的引用

在代码的最顶级,可以使用关键字this来引用全局对象

3. 在浏览器窗口中的所有代码中,window对象来充当全局对象

4. window对象定义了核心全局属性,同时也针对浏览器和客户端定义了少部分其他属性

5. 当初次创建的时候,全局对象定义了js中所有的预定义全局值

6. 全局对象同样也包含了为程序定义的全局值,如果代码声明了一个全局变量,那么这个全局变量也是全局对象的一个属性

/* 包装对象 */

7. 对于简单值来讲其实不存在方法的,但是简单之所以可以调用方法,如字符串 s.length,是因为一旦引用了s的属性,js就会将字符串通过new String()的方式转换为字符串对象,这个对象继承了字符串的方法,并被用来处理属性的应用,一但引用结束,这个对象就会被销毁。类似的情况也会发生于数字和布尔值类型上,这个临时对象就是包装对象。

8. 注意:null和undefined没有包装对象,所以访问他们的属性时会报错

9. 注意:可以通过String(),Number(),Boolean()来显式创建包装对象;在判断相等的时候,同一个值的包装对象和原始值在‘==‘时是相等,在‘===‘时不相等

(二)原始值和对象的比较方式

1. 原始值的值是不可变的,对象的值是可变的

2. 原始值的比较是值的比较:只有在它们的值相等时,它们才相等

3. 对象的比较并非值的比较,即便两个对象包含同样的属性和同样的值,它们也不相等,因为对象属于引用类型,它们的‘值’是引用,所有对象的比较是引用的比较

(三)类型转换

1. js可以做自动的类型转换

2. 原始值到原始值的转换 (详细的转换规则见犀牛书第6版 49页)

3. 原始值到对象的转换比较简单,使用String(),Number(),Boolean();注意:null和undefined比较例外

4. 对象转换为原始值:

(1)对象转换为布尔值:所有的对象(包括函数和数组)都转换为true

(2)对象到字符串或数字:

  • 宿主对象(如由浏览器定义的对象)根据各自的算法可以转换为字符串和数字
  • 本地对象通过继承的两个方法来转换:toString(),valueOf()
  • toString():很多类定义了更多特定的版本,数组类的toString将每个数组元素转换成一个字符串,并在元素之间添加逗号后合并成结果字符串;函数类是返回这个函数的实现定义的表示;日期类是返回一个可读的日期和时间字符串;RegExp类是返回表示正则表达式直接量的字符串
  • valueOf():如果存在原始值,它就默认将对象转换为表示它的原始值;如果对象无法表示原始值,它就返回对象本身;数组,函数和正则对象都是返回本身;日期类hi返回一个内部表示,即1970年1月1日以来的毫秒数
  • 对象转为字符串的过程:如果对象有toString方法,则调用这个方法,将结果转换为字符串;如果没有toString,或者这个方法并不返回一个原始值,那么js会调用valueOf()方法,如果存在就则调用它,返回的是原始值的话则转换为字符串;否则,js无法从toString或者valueOf获得原始值,此时报错。
  • 对象转换为数字:如果对象有valueOf方法,则调用该方法并返回一个原始值,js将此原始值转换为数字;否则如果对象有toString方法,则返回一个原始值,js将此原始值转换为数字返回;否则,抛出异常

(3)日期对象转换为原始值:通过valueOf或toString返回的原始值将被直接使用,而不会强制转换为数字或字符串

(4)除了日期外,任何对象要转换为原始值都会先尝试调用valueOf,然后调用toString

时间: 2024-12-16 15:39:24

类型、值和变量(二)的相关文章

JS学习第五天----类型,值,和变量

类型,值,和变量 前言:计算机程序的运行需要对值(value)比如数字3.14或文本"hello,world"进行操作,在编程语言中,能够表示并操作的值的类型叫做数据类型(type),编程语言最基本的特性就是支持多种数据类型.当程序需要将值保持起来以备将来使用时,便将其赋值给(将值"保存"到)一个变量(variable).变量是一个值的符号名称,可以通过名称获得对值的引用.变量的工作机制是变成语句的另一个基本特征. 前言:JavaScript的数据类型分为两类:原始

第3章 类型,值和变量

能够表示并操作的值的类型称做数据类型(type) JS中包含 原始类型(primitive type) 和 对象类型(object type) 原始类型包括:数字,字符串,布尔值,NULL,undefined 对象(object)是属性(property)的集合,每个属性都是键值对(key/value)构成. 数组(array)是一种特殊的对象,普通的对象是"命名值"的无序集合,而数组表示带编号的值的有序集合 函数(function)也是一种特殊的对象,函数是具有与它相关联的可执行代码

你根本不会Javascript(1)——类型、值和变量

文原载于szhshp.org/tech/2017/02/18/JavaSprite.html 转载请注明 类型.值和变量 包装对象和原始值 ECMAScript 有 5 种原始类型(primitive type) Undefined Null Boolean Number String 基本类型(null, undefined, bool, number, string)应该是值类型,没有属性和方法. 内置对象 Javascript有一系列内置对象来创建语言的基本功能,具体有如下几种 Boole

第3章 类型、值和变量

1. JS数据类型分为两类:原始类型(primitive type)和对象类型(object type).原始类型包括数字.字符串.布尔值以及null(空)和undefined(未定义)两个特殊原始值,null和undefined分别代表了各自特殊类型的唯一成员. 对象是属性的集合,每个属性由“名/值对”构成.JS中普通的对象是“命名值”(或者说“名/值对”)的无序集合,不过JS定义了一种特殊对象——数组,表示带编号值的有序集合. JS还定义了另外一种特殊对象——函数,JS中函数也是对象.数组和

《JS权威指南学习总结--第三章类型、值和变量》

第三章 类型.值和变量 内容要点 一.数据类型 1.在编程语言中,能够表示并操作的值的类型称做数据类型 2.JS的数据类型分为两类: 原始类型:数字.字符串和布尔值 对象类型 3.JS中有两个特殊的原始值:null(空)和undefined(未定义) 4.对象(object):是属性(property)的集合,每个属性都由"名/值对"构成. 5.函数:JS中定义的另一种特殊对象.函数是具有与它相关联的可执行代码的对象,通过调用函数来运行可执行的代码,并返回运算结果. 6.构造函数: 如

JavaScript权威指南第03章 类型、值和变量

类型.值和变量 数据类型分类: 原始类型(primitive type):数字 字符串 布尔值 null undefined 对象类型(object type): 对象是属性的集合,每个属性都由"名/值"对构成. javascript解释器有自己的内存管理机制,可以自动对内存进行垃圾回收. 3.1数字 javascript不区分浮点和整型,所有的数字都是按照浮点型处理. 3.1.1整型直接量 3.1.2浮点型直接量 3.1.3算数运算 3.1.4二进制浮点数和四舍五入错误 当进行小数进

JavaScript权威指南第03章 类型、值和变量(2)

题目链接:https://oj.leetcode.com/problems/set-matrix-zeroes/ Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. 一个个找肯定会超时,我们可以分别用一个行向量和一个列向量进行维护.这样O(m*n) 能出来 class Solution { public: void setZeroes(vector<vector

C语言函数返回值和变量类型

前言 最近在刷题,在写矩阵的快速幂的题时,对于返回值是数组的程序,写的十分冗杂.借此机会,重新梳理下C语言中函数的返回值与变量类型的关系. 按照变量的寿命,可以分为三种类型 1.静态变量 寿命从程序开始运行,到程序关闭结束  储存在静态储存区中 2.自动变量 寿命从声明该变量的语句块到结束为止  储存在栈中,系统自动释放 3.通过malloc()分配的 寿命直到free()为止  储存在堆中,由用户自主释放 函数的返回值 之前自己有写过一个关于迷宫的demo,但是总是调试出错,请教别人后发现,自

linux shell自定义函数(定义、返回值、变量作用域)介绍

http://www.jb51.net/article/33899.htm linux shell自定义函数(定义.返回值.变量作用域)介绍 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1.可以带function fun() 定义,也可以

3 类型,存储和变量1

c#程序是一组类型声明 类型是一种模板 实例化类型 数据成员和函数成员 预定义类型 用户定义类型 栈和堆 值类型和引用类型 存储引用类型对象的成员 c#类型的分类 变量 变量声明 变量初始化 自动初始化