字符串类型

字符串介绍

这是程序里面使用最为广泛的一-种类型。在JavaScript里面, 可以使用单引号,也可以使用双引号;

字符串这种数据类型非常霸道,它和其他数据类型相加都会被转换后才为字符串类型;
所以如果我们要让一个非字符串的变量转换为字符串的话,只需要和一个空字符串相加就可以了。
当然,转换字符串事实上我们也有相应的函数来转换,最常见的就是toString()函数。

null和undefined并不能通过toString0函数来转换为相应的字符串 。还有一个知识点,就是toString(函数在转换数值的时候是 可以带有参数的。可以将数值指定转换为几进制

JavaScript还有一个函数是string(),这个函数可以将五种类型都转换为字符串

字符串模板

在es6中新增了模板字面量是增强版的字符串,它用反引号(`)标识

使用模板字面量语法创建一个字符串,并赋值给message变量,这是变量的值与一个普通字符串无异;

如果想在字符串中包含反引号,只需要使用反斜杠\转义即可;

在反引号之内的所有空白符都是字符串的一部分,因此需要特别留意缩进

模板字面量看上去仅仅是普通JS字符串的升级版,但二者之间真正的区别在于模板字面量的变量占位符。变量占位符允许将任何有效的JS表达式嵌入到模板字面量中,并将其结果输出为字符串的一部分

变量占位符由起始的${与结束的}来界定,之间允许放入任意的JS表达式。最简单的变量占位符允许将本地变量直接嵌入到结果字符串中
   占位符${name}会访问本地变量name,并将其值插入到message字符串中。message变量会立即保留该占位符的结果
既然占位符是JS表达式,那么可替换的就不仅仅是简单的变量名。可以轻易嵌入运算符、函数调用等

symbol类型

ES5中包含5种原始类型:字符串、数字、布尔值、null和undefined。 ES6引入了第6种原始类型:symbol

ES5的对象属性名都是字符串,很容易造成属性名冲突。比如,使用了一个他人提供的对象,想为这个对象添加新的方法,新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的,这样就从根本_上防止了属性名冲突。这就是ES6引入symbol的原因。

简单值和复杂值的区别
简单值

简单值是表示JS中可用的数据或信息的最底层形式或最简单形式。简单类型的值被称为简单值,是因为它们是不可细化的。

也就是说,数字是数字,字符是字符,布尔值是true或false, null和undefined就是null和

undefined。这些值本身很简单,不能够再进行拆分。由于简单值的数据大小是固定的,所以简单值的数据是存储于内存中的栈区里面的。

nll和undefined比较特殊,打印出来的数据类型分别是object和undefined。因为这两个数据类型没有对应的构造函数

复杂值

在JavaScript中,对象就是一个复 杂值。因为对象可以向下拆分,拆分成多个简单值或者复杂值。复杂值在内存中的大小是未知的,因为复杂值可以包含任何值,而不是一个特定的已知值。所以复杂值的数据都是存储于堆区里面。

访问方式

按值访问:简单值是作为不可细化的值进行存储和使用,引用他们会转移其值

引用访问:复杂值是通过引用进行存储和操作的,而不是实际的值。创建一个包含复杂对象的变量时,其值是内存中的一个引用地址。引用一个复杂对象时,使用它的名称(即变量或对象属性)通过内存中的引用地址获取该对象值

比较方式:简单值采用值比较,而复杂值采用引用比较。复杂值只有在引用相同的对象(即有相同的地址)时才相等。即使是包含相同对象的两个变量也彼此不相等,因为它们并不指向同一个对象

动态属性

对于复杂值,可以为其添加属性和方法,也可以改变和删除其属性和方法;但简单值不可以添加属性和方法

复杂值支持动态对象属性,因为我们可以定义对象,然后创建引用,再更新对象,并且所有指向该对象的变量都会获得更新。

一个新变量指向现有的复杂对象,并没有复制该对象。这就是复杂值有时被称为引用值的原因。复杂值可以根据需求有任意多个引用,即使对象改变,它们也总是指向同一个对象

变量赋值

最后说一下关于变量的赋值,其实是可以分为直接赋值和引用赋值的。直接赋值,就是指将简单值赋值给变量,而引用赋值是指将一个复杂值的引用赋值给变量,这个引用指向堆区实际存在的数据

类型转换

隐性转换
当不同数据类型进行相互运算的时候,当对非布尔类型的数据求布尔值的时候
预期为数字的时候:
算术运算的时候,我们的结果和运算的数都是数字,数据会转换为数字进行计算(-* / %)

预期为字符串的时候:

转为字符串使用+号时候,会自动转换为字符串

预期为布尔的时候:

转换为布尔值,undefined, null,  11”,0, NaN转为false, 其余转为true

强制转换

转换为数值number(),parseInt() ,parseFloat() 转换函数小技巧:

●转换字符串: a="+数据●转换布尔: !数据类型

●转换数值:数据类型*或/1

运算符

任何编程语言基本上都离不开运算符。在JavaScript中也是支持众多运算符的。例如最常见的算数运算符,比较运算符,逻辑运算符等。接下来,就让我们一起来看一下JavaScript中这几种常见的运算符。

算数运算符,

常见的算数运算符有加减乘除和取模运算。主要需要注意的就是,在动态语言中做除法运算时,能够得到小数。

从es6开始新增加了求幂运算,使用两个*号代表求幂。

一元运算符

所谓一元运算符,就是指只作用于一一个操作数的运算符。常见的一元运算符有两种,赋值运算符和递增递减运算符。

常见的一元运算符还有递增和递减。在递增递减中,主要需要注意前置和后置的区别。如果是前置,那么是先自增或自减,然后参与运算。如果是后置,则是先参与运算,然后再自增或者自减,

需要注意的是,我们的自增自减操作符不仅仅局限于数值,其他类型也可以,遵循下面的规则: :

●在应用于一个包含有效数字字符的字符串时,现将其转换为数字值,再执行加减1操作。字符串变量变为了数值变量。

●在应用于一个不包含有效数字字符的字符串时,将变量的值设置为NaN,字符串变量变成数值变量。

●遇布尔值false时, 先将其转换为0再执行加减1操作,布尔值变量变成数值变量。

●遇布尔值true时,先将其转换为1再执行加减1操作,布尔值变量变成数值变量。

●在应用浮点数数值时,执行加减1操作。

比较运算符

●如果两个数都是数值,则执行数值比较

●如果两个数都是字符串,则比较两个字符串对应的字符编码

●如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值的比较

●如果一个操作数是对象,则调用这个对象的valueOf()方法,用得到的结果按照前面的规则执行比较。如果对象没有value0f()方法,则调用toString()方法,并用得到的结果根据前面的规则执行比较。

●如果一个数是布尔值,则先将其转换为数值,然后再进行比较

相等和不相等
==表示相等,!= 表示不相等,数据类型不同的数据进行相等比较的话会自动转换数据类型,还有一些其他的转换规则如下:
●null和undefined是相等的
●如果有一个操作数是NaN,则返回false, NaN和NaN比较也是false

●如果是数字的字符串和数字进行比较,会先将字符串转换为数字

●布尔值里面true转换为1,false转换 为0

全等是===,不全等是!==这个就是必须数据类型和数值都相等

逻辑运算符

所谓非,就是取反,非真即假,非假即真

非运算符不仅仅只能用于布尔值,其他数据类型也是可以的,如下:

●如果操作数是一个对象,返回false

●如果操作数是一个空字符串,返回true●如果操作数是一个非空字符串,返回false如果操作数是数值0,返回true

●如果操作数是任意非0数值(包括Infinity), 返回false●如果操作数是null,返回true●如果操作数是NaN,返回true

●如果操作数是undefined,返回true

作用于两到多个值,并且只有所有的操作数都是真值时,才为true
JavaScript里面的与存在短路现象,具体说明如下:
●第一个操作数为真:会进入第二个操作数的判断,且无论第二个操作数真假,都会返回第二个操作数。
●第一个操作数为假:不会进入第二个操作数的判断,直接返回第一 个操作数。

如果你看《JavaScript高级程序设计》这本书,里面还讲了诸如下面这些杂七杂八的规则:

●如果第一个操作数是对象,则返回第二个操作数

●如果第二个操作数是对象,则只有在第一-个操作数的求值结果为true的情况下才会返回该对象

●如果两个操作数都是对象,则返回第二个操作数

●如果有一个操作数是null,则返回null

●如果有一个操作数是NaN,则返回NaN

●如果有一个操作数是undefined, 则返回undefined

同样是作用于两到多个值,但是只有一个操作数为真,就返回真
JavaScript里面的或同样存在短路现象,具体说明如下:
●如果第一个操作数为真,则不会进入第二个数的判断。所以无论第二个操作数真假,都直接返回第-个操作数
●如果第一个操作数为假,则会进入第二个数的判断。但是无论第二个操作数真假,都直接返回第二个操作数

如果你看《JavaScript高级程序设计》这本书,里面也讲了诸如下面这些杂七杂八的规则:

●如果第一个操作数是对象,则返回第一 个操作数

●如果第一个操作数的求值结果为false, 则返回第二个操作数

●如果两个操作数都是对象,则返回第一个操作数

●如果两个数都是null,则返回null

●如果两个数都是NaN,则返回NaN

●如果两个数都是undefined,则返回undefined

JavaScript中字符串类型的更多相关文章

  1. 小结 javascript中的类型检测

    先吐槽一下博客园的编辑器,太不好用了,一旦粘贴个表格进来就会卡死,每次都要用html编辑器写,不爽! 关于javascript的类型检测,早在实习的时候就应该总结,一直拖到现在,当时因为这个问题还出了 ...

  2. Javascript学习1 - Javascript中的类型对象

    原文:Javascript学习1 - Javascript中的类型对象 1.1关于Numbers对象. 常用的方法:number.toString() 不用具体介绍,把数字转换为字符串,相应的还有一个 ...

  3. JavaScript中值类型和引用类型的区别

    JavaScript的数据类型分为两类:原始类型和对象类型.其中,原始类型包括:数字.字符串和布尔值.此外,JavaScript中还有两个特殊的原始值:null和undefined,它们既不是数字也不 ...

  4. javascript 中的类型

    javascript 中的类型 js 是一门弱语言,各式各样的错误多种多样,特别是确定返回值有问题的时候,你会用什么来进行表示错误? 我一般有三个选择: null '' error {} 第一个选择 ...

  5. 【你不知道的javaScript 中卷 笔记1】javaScript中的类型与值

    一.类型与值 1.0 javaScript 七种内置类型: 空值(null) 未定义(undefined) 布尔值( boolean) 数字(number) 字符串(string) 对象(object ...

  6. javascript中字符串常用操作整理

    javascript中字符串常用操作整理 字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用 ...

  7. JavaScript中Float类型保留两位小数

    JavaScript中Float类型保留两位小数 核心方法: num:要操作的数字     size:要保留的位数 parseFloat(num).toFixed(size); 实现代码如下:var  ...

  8. JavaScript中字符串的match与replace方法

    1.match方法 match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配. match()方法的返回值为:存放匹配结果的数组. 2.replace方法 replace() 方 ...

  9. JavaScript中字符串分割函数split用法实例

    这篇文章主要介绍了JavaScript中字符串分割函数split用法,实例分析了javascript中split函数操作字符串的技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了JavaSc ...

随机推荐

  1. iOS开发系列-iOS适配

    概述 发布iPhone X 系统版本为iOS11, 由于刘海屏原因需要对新的机型做适配. iPhone X safeArea iOS11苹果提出safeArea替代iOS7引入 topLayoutGu ...

  2. CSS在工程中改变之面向对象的 CSS

    oocss的概念 众多开发者忽视了css的表现(认为它) oocss将页面可重用的元素抽象成一个类,用class加以描述,而与其对应的HTML即可看成是此类的一个实例. oocss的作用 1.加强代码 ...

  3. Android开发 多媒体提取器MediaExtractor详解_将一个视频文件分离视频与音频

    前言 此篇博客讲解MediaExtractor将一个视频文件分离视频与音频,如果你对MediaExtractor还没有一个笼统的概念建议先了解我的另一篇入门博客:https://www.cnblogs ...

  4. Linux的命令提示符 修改

    Linux的命令提示符可按个人喜好随意更改,修改PS1的值即可: 在Ubuntu下若只是个别用户下修改~/.profile文件就好,所有用户统一则修改/etc/profile: 加入: export ...

  5. hysbz3676 回文串 回文自动机

    回文自动机模板题 头铁了一下午hdu6599,最后发现自己的板有问题 先放这里一个正确性得到基本确认的板,过两天肝hdu6599 #pragma GCC optimize(2) #include< ...

  6. 出现不不能引java.util.Date包的情况

    出现不不能引java.util.Date包的情况 那个时间段不能引,IDE的bug,等一会儿就好了 心得:很多时候没必要和bug死磕,因为真的不是你的问题.

  7. SQLServer 中存储过程

    SQLServer 中存储过程返回的三种方式( 包括存储过程的创建, 在存储过程中调用, 在VS中调用的方法)存储过程有三种返回:   1.   用return返回数字型数据   2.   用返回参数 ...

  8. 基础数据类型补充 set集合 深浅拷贝

    一.基础数据类型补充 1. "拼接字符串".join(可迭代对象) 可迭代对象为列表时,输出列表元素与拼接字符串的拼接 li = ['张三', '李四', '王五', '赵四'] ...

  9. 百度跨域搜索demo

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  10. Pycharm VS VS Code(个人使用感受)

    Pycharm IDE (community enough!) 简单介绍:Pycharn的确是我刚开始学习python时,除了Visual Studio之外,上手的第二个IDE,最初是因其好看的界面, ...