JavaScript学习(二):原始数据类型-字符串、数字、布尔值、null、undefined

本文主要是介绍JavaScript学习(二):原始数据类型-字符串、数字、布尔值、null、undefined,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据类型 --- 能够表示并操作值的类型,编程语言的最基本特性就是能够支持多种数据类型。

JavaScript的数据类型分为两种: 原始类型 (primitive type)  对象类型(object type)

原始数据类型包括:  数字   字符串  布尔值   ,
特殊的原始值:null  undefined,不是数字、字符串和布尔值,代表了各自特殊类型的唯一的成员。
除了数字、字符串、布尔值、null和undefined之外就是对象了,对象是属性的集合,每个属性都由“名/值对”构成,有一个特殊的对象-全局对象。

普通的JavaScript对象是“命名值”的无序集合,但JavaScript同样定义了一种特殊对象-数组。表示带编号的值的有序集合。

函数--JavaScript的特殊对象,是具有与它相关联的可执行代码的对象,通过调用函数来运行可执行代码,并返回运算结果。
如果函数用来初始化(new)一个新建的对象,称为构造函数,每个构造函数定义了一类对象-由构造函数初始化的对象组成的集合,类可以看做是对象类型的子类型。JavaScript语言核心除了数组(Array)类和函数(Function)类之外,还定义其他三种有用的类,日期(Date)类,正则(RegExp)类,错误(Error)类。可以通过定义自己的构造函数来定义需要的类。

JavaScript解释器有自己的内存管理机制,可以自动对内存进行垃圾回收,这意味着程序可以按需创建对象,不必担心这些对象的销毁和内存回收。当不再有任何引用指向一个对象,解释器就会知道这个对象没用,然后自动回收它所占的资源。

JavaScript是一种面向对象的语言,不严格地讲,这意味着我们不用全局的定义函数去操做不同类型的值,数据类型本身可以定义方法来使用值。从技术上来讲,只有JavaScript对象才拥有方法,但是数字、字符串和布尔值也可以拥有自己的方法,在JavaScript中,只有null和undefined是无法拥有方法的值。

JavaScript分类

原始类型 对象类型
拥有方法的类型 不能拥有方法的类型
可变类型:对象、数组 不可变类型:字符串、布尔值、null、undefined
在JavaScript中,字符串是不可变的,可以访问字符串任意位置的文本,但并未提供修改已知字符串的文本内容的方法。

JavaScript可以自由的进行数据类型的转换。

JavaScript的变量是无类型的,变量可以赋予任何类型的值,统一一个变量可以赋予不同类型的值,使用var 关键字来声明变量。JavaScript采用词法作用域,不在任何函数内声明的变量称作全局变量,它在JavaScript程序中的任何地方都是可见的,在函数内声明的变量具有函数作用域,并且只在函数内可见。



3.1  数字
JavaScript不区分整数值和浮点数值,JavaScript中的所有数字均用浮点数字表示。
采用IEEE 754标准定义的64位浮点格式代表数字,最大+-1.7976931348623157x10 (308次方)  最小 +-5x10(-324次方)
能够表示的整数范围-2(53次方)~2(53次方),如果超过了此范围的整数,则无法保证低位数字的精度。
但是,JavaScript中实际的操作(比如数组索引,位操作符)则是基于32位整数。

3.1.1 整型直接量

JavaScript除了能表示十进制的整型直接量,同样能够识别十六进制的值,八进制不确定。
3.1.2 浮点型直接量

浮点型直接量可以含有小数点,一个实数由整数部分、小数点和小数部分组成。  3.14
还可以使用指数记数法表示浮点型直接量,即在实数后跟字母e或E,后面再跟正负号。 1.1457E-32
3.13 JavaScript中的算术运算

JavaScript使用语言本身的算术运算符来进行数字运算,+    -    *    /     %
除了基本的运算符,还支持复杂的算术运算,这些复杂运算通过作为Math对象的属性定义的函数和常量来实现:
Math.pow(2,53); Math.round(.6);.....

JavaScript中的算术运算在溢出(overflow)、下溢(underflow)或被零整除时不会报错。当数字运算结果超过了JavaScript所能表示的数字上限,结果作为一个特殊的无穷大值,在JavaScript中以Infinity表示,负值超过了也是一样的算法。无穷大的特性:基于他们的加减乘除也是无穷大。

下溢是当运算结果无限接近于零并比JavaScript能表示的最小值还小的时候发生的一种情况,这种情况下,会返回0.当一个负数发生下溢时,JavaScript返回一个特殊的值“负零”,负零和正零几乎完全一样,很少用到。

被零整除在JavaScript并不报错,只是简单的返回无穷大或负无穷大;但有一个例外,0/0是无意义的,运算结果也是一个非数字值,用NaN表示。无穷大除以无穷大、给任意负数做开方运算或者算术运算符与不是数字或无法转换为数字的操作数一起使用时都将返回NaN.

JavaScript预定义了全局变量Infinity和NaN,用来表示正无穷大和非数字值。非数字值NaN有一点特殊:它和任何值都不相等,包括自身,没办法通过x==NaN来判断变量x是否是NaN
isNaN()---如果参数是NaN或者是一个非数字值(比如字符串和对象),则返回true;
isFinite()---在参数不是NaN、Infinity或-Infinity的时候返回true;

负零值同样有些特殊,它和正零值是相等的,但除了作为除数之外:
var zero = 0;
var negz = -0;
console.log(zero == negz);                          true
console.log(1/zero == 1/negz);                   false
3.1.4 二进制浮点数和四舍五入错误

JavaScript采用了IEEE-754浮点数表示法,这是一种二进制的 表示法,可以精确的表示分数,比如1/2、1/8和1/1024,但是我们常用的是十进制分数,1/10、1/100等,二进制并不能表示类似0.1这样简单的数字。

JavaScript中的数字有足够的精度,并且可以极其近似于0.1,但事实上并不等:
var x = .3 - .2;
var y = .2 - .1;
console.log(x); // 0.09999999999999998
console.log(y); // 0.1

x == y; //--false

在任何使用二进制浮点数的编程语言都会出现这个问题(可以采取分为单位,而不是元)
3.1.5 日期和时间

JavaScript语言核心包括Date()构造函数,用来创建表示日期和时间的对象,但不是基本数据类型。

var then = new Date(2011,0,1);//2011年1月1日
var later = new Date(2011,0,1,17,10,30);
//2011年1月1日下午5:10:30
var now = new Date();
var elapsed = now - then; //日期减法:间隔毫秒数

later.getFullYear(); //--2011
later.getMonth();  //--0 从0开始计算月份
later.getDate();  //--1 从1开始计算的
var day = later.getDay();  //--0代表星期天
console.log(day);
later.getHours();
later.getUTCHours(); //使用UTC表示小时的时间 基于时区



3.2 文本
字符串是一组由16位值组成的不可变的有序序列,每个字符通常来自于Unicode字符集。JavaScript通过字符串类型来表示文本。字符串的长度是其所含16位值的个数。
JavaScript采用UTF-16编码的Unicode字符集,JavaScript字符串是由一组无符号的16位值组成的序列。最常用的Unicode字符都是通过16位的内码表示,并代表字符串中的单个字符,那些不能表示为16位的Unicode字符遵循UTF-16编码规则-用两个16位值组成的一个序列表示。这意味着一个长度为2的JavaScript字符串(两个16位值)有可能表示一个Unicode字符:

var p = "π";
var e = "e";
console.log(e.length);  //--2

3.2.1 字符串直接量

在JavaScript程序中的字符串直接量,是由单引号或者双引号括起来的字符序列。由单引号定界的字符串刻印包含双引号,由双引号定界的字符串中也可以包含单引号。

在ECMAScript 3中,字符串直接量必须写在一行中,而在ECMAScript 5中,字符串直接量可以拆分成数行,每行必须以反斜线(\)结束,反斜线和行结束符都不算字符串直接量的内容。如果希望在字符串直接量中另起一行,可以使用转义字符  \n
*再用单引号的时候必须注意英文中的缩写和所有格写法 can't   O'Relly's,此时必须使用反斜线(\)来转义。

*JavaScript代码和HTML代码都用单引号或者双引号,但最好各自使用个独立的引号风格。
3.2.2 转义字符
在JavaScript中,反斜线(\)有着特殊的用途,如在上文中转义:'can\'t  '  ' O\'Relly\'s'
JavaScript转义字符
\o    ----   NUL字符(\u0000)
\b    ----   退格符(\u0008)
\t     ----   水平制表符(\u0009)
\n    ----   换行符(\u000A)
\v    ----   垂直制表符(\u000B)
\f     ----   换页符  (\u000C)
\r    -----   回车符(\u000D)
\''    ----    双引号(\u0022)
\'    -----   撇号或者单引号(\u0027)
\\    -----  反斜线(\u005C)
\xXX    -----  由两位十六进制数XX指定的Latin-1字符
\uXXXX   ----  由四位十六进制数XXXX指定的Unicode字符

如果“\”字符没有在以上列表中出现,则忽略“\”
3.2.3 字符串的使用

JavaScript的内置功能之一就是字符串的连接,用“+”作用于字符串表示字符串连接
JavaScript字符串调用方法:
var s = "hello,world";
s.charAt(0); //第一个字符:h
s.substring(1,4); //第2-4个字符:ell
s.slice(1,4); //同上
s.slice(-3);  //最后三个字符:rld
s.indexOf("l");  //字符"l"第一次出现:2
s.lastIndexOf("l"); //字符串"l"最后一次出现:9
s.indexOf("l",3); //在位置3后面首次出现"l"的位置:3
s.split(",");//按照","分割:['hello','world']
s.replace("h","H");//"h"全用"H"替代
s.toUpperCase();//纯大写 
 3.2.4  模式匹配
JavaScript定义了RegExp()构造函数,用来创建表示文本匹配模式的对象   ------  称为‘正则表达式’
JavaScript采用Perl中的正则表达式语法,String和RegExp对象均定义了利用正则表达式进行模式匹配和查找与替换的函数
RegExp是JavaScript的特殊对象,虽然不是语言中的基本数据类型,但是具有直接量写法,可以直接在JavaScript程序中使

var text = "testing:1,2,3";
var pattern = /\d+/g;  //匹配所有包含一个或多个数字的实例
pattern.test(text);  // true
text.search(pattern);  //首次匹配成功的位置:8
text.match(pattern);  //所有匹配组成的数组 ['1','2','3']


3.3 布尔值
布尔值代表真或假、开或关、是或否,只有两个值 true、false。
在JavaScript中,任意的JavaScript值都可以转换成布尔值:

undefined ,null ,0 ,-0 ,NaN ,“”   会被转换成false;
所有其他值,包括所有对象(数组)都会转换成true

假值(falsy value)--false和上面六个可以转换成false的值;
真值(truthy value) -- true和可以转换成true的值;
在JavaScript期望使用一个布尔值时,假值会被当成false,真值会被当成true。

if(o !== null)......只有当o不是null时才会执行之后的代码
if(o)......o不是任何假值都会执行之后的代码



3.4 null和undefined

null 是JavaScript的关键字,表示一个特殊值,常用来描述“空值”;、
表示数字、字符串和对象是“无值”的;
typeof(null) == "object"  // "object"    返回字符串“object” ,也就是说,可以把null认为是一个特殊的对象值,含义是非对象。

undefined是预定义的全局变量,不是关键字,它的值就是“未定义”;
表明变量没有初始化,或者属性和元素不存在
typeof(undefined)  // "undefined"  返回字符串“undefined” 这个值是这个类型的唯一成员

这篇关于JavaScript学习(二):原始数据类型-字符串、数字、布尔值、null、undefined的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138835

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06