JavaScript全面学习(中阶)

1.typeof操作符总是返回一个字符串:

typeof 123; // 'number'
typeof NaN; // 'number'
typeof 'str'; // 'string'
typeof true; // 'boolean'
typeof undefined; // 'undefined'
typeof Math.abs; // 'function'
typeof null; // 'object'
typeof []; // 'object'
typeof {}; // 'object'  用typeof无法区分出nullArray和通常意义上的object——{}

2.包装对象:

var n = new Number(123); // 123,生成了新的包装类型
var b = new Boolean(true); // true,生成了新的包装类型
var s = new String('str'); // 'str',生成了新的包装类型
typeof new Number(123); // 'object'
new Number(123) === 123; // false
typeof new Boolean(true); // 'object'
new Boolean(true) === true; // false
typeof new String('str'); // 'object'   包装使他们的类型变成了object
new String('str') === 'str'; // false    所以对于string类型,最好不要包装对象。

正确的转换法是不用new

var n = Number('123'); // 123,相当于parseInt()或parseFloat()
typeof n; // 'number'var b = Boolean('true'); // true
typeof b; // 'boolean'var b2 = Boolean('false'); // true! 'false'字符串转换结果为true!因为它是非空字符串!
var b3 = Boolean(''); // falsevar s = String(123.45); // '123.45'
typeof s; // 'string'

总结一下,有这么几条规则需要遵守:

  • 不要使用new Number()new Boolean()new String()创建包装对象;

  • parseInt()parseFloat()来转换任意类型到number

  • String()来转换任意类型到string,或者直接调用某个对象的toString()方法;

  • nullundefined没有toString()方法。数字对象的toString()方法要这样写:

    123.toString(); // SyntaxError
    123..toString(); // '123', 注意是两个点!
    (123).toString(); // '123'3.14.toString();   // '3.14'
    3.14..toString();  // SyntaxError
    (3.14).toString(); //'3.14' 
    // 第一个点是指小数点,第二个点才是调用toString()方法,所以3.14不需要用两个点调用toString()方法
  • 通常不必把任意类型转换为boolean再判断,因为可以直接写if (myVar) {...}

  • typeof操作符可以判断出numberbooleanstringfunctionundefined

  • 判断Array要使用Array.isArray(arr)

  • 判断null请使用myVar === null

  • 判断某个全局变量是否存在,用typeof window.myVar === 'undefined'

  • 函数内部判断某个变量是否存在,用typeof myVar === 'undefined'

3.Date对象,获取本机系统当前时间:

var now = new Date();
now; // Wed Jun 24 2015 19:49:22 GMT+0800 (CST)
now.getFullYear(); // 2015, 年份
now.getMonth(); // 5, 月份,注意月份范围是0~11,5表示六月
now.getDate(); // 24, 表示24号
now.getDay(); // 3, 表示星期三
now.getHours(); // 19, 24小时制
now.getMinutes(); // 49, 分钟
now.getSeconds(); // 22, 秒
now.getMilliseconds(); // 875, 毫秒数
now.getTime(); // 1435146562875, 以number形式表示的时间戳

创建一个指定日期和时间的Date对象:

var d = new Date(2015, 5, 19, 20, 15, 30, 123);
d; // Fri Jun 19 2015 20:15:30 GMT+0800 (CST)
//注意JavaScript的月份范围用整数表示是0~11,0表示一月,1表示二月……//或者这样也能创建:
var a = Date.parse('2015-06-24T19:49:22.875+08:00');
a; // 1435146562875    返回一个时间戳//可以再如下转换:
var c = new Date(1435146562875);
c; // Wed Jun 24 2015 19:49:22 GMT+0800 (CST)
c.toLocaleString(); // '2015/6/24 下午7:49:22',本地时间(北京时区+8:00),显示的字符串与操作系统设定的格式有关
c.toUTCString(); // 'Wed, 24 Jun 2015 11:49:22 GMT',UTC时间(世界标准时间),与本地时间相差8小时   科普:格林威治标准时间GMT

4.正则表达式,如果直接给出字符,就是精确匹配。用\d可以匹配一个数字,\w可以匹配一个字母或数字,用.可以匹配任意字符

   *表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n-m个字符

 \s可以匹配一个空格(也包括Tab(/t)等空白符)

   例如:要匹配'010-12345'这样的号码,由于'-'是特殊字符,在正则表达式中,要用'\'转义,所以正则是\d{3}\-\d{3,8}

   还能可以用[]表示范围 :[a-zA-Z\_\$][0-9a-zA-Z\_\$]*可以匹配由字母或下划线、$开头,后接任意个由一个数字、字母或者下划线、$组成的字符串,也就是JavaScript允许的变量名;

    A|B可以匹配A或B,所以(J|j)ava(S|s)cript可以匹配'JavaScript''Javascript''javaScript'或者'javascript'

  ^表示行的开头,^\d表示必须以数字开头。

  $表示行的结束,\d$表示必须以数字结束。

5.RegExp。正则表达式。

写正则表达式的两种方法:

var re1 = /ABC\-001/;
var re2 = new RegExp('ABC\\-001'); //注意是两\\,转义
re1; // /ABC\-001/
re2; // /ABC\-001/

RegExp对象的test()方法用于测试给定的字符串是否符合条件:

var re = /^\d{3}\-\d{3,8}$/;
re.test('010-12345'); // true
re.test('010-1234x'); // false
re.test('010 12345'); // false

正则表达式切分字符串十分好用:

'a b   c'.split(' '); // ['a', 'b', '', '', 'c']   不用正则的话
'a b   c'.split(/\s+/); // ['a', 'b', 'c']    用正则,把空格忽略掉
'a,b, c  d'.split(/[\s\,]+/); // ['a', 'b', 'c', 'd']  把空格和,忽略掉
'a,b;; c  d'.split(/[\s\,\;]+/); // ['a', 'b', 'c', 'd']   把空格和,和;都忽略掉

()表示要提取的分组,再用exec()方法提取出子串:

var re = /^(\d{3})-(\d{3,8})$/;   // 这里不再需要\-
re.exec('010-12345'); // ['010-12345', '010', '12345']
re.exec('010 12345'); // null  匹配失败返回null

贪婪匹配,匹配尽可能多的字符:

var re = /^(\d+)(0*)$/;
re.exec('102300'); // ['102300', '102300', '']   \d+把数字全部匹配了,所以0*无法匹配到0

非贪婪匹配,也就是尽可能少匹配:

var re = /^(\d+?)(0*)$/;   // 想要的非贪婪项后面加?号
re.exec('102300'); // ['102300', '1023', '00']

特殊的标志:g标志,表示全局匹配。全局匹配类似搜索,因此不能使用/^...$/,那样只会最多匹配一次。

                i标志,表示忽略大小写。m标志,表示执行多行匹配。

var r1 = /test/g;
// 等价于:
var r2 = new RegExp('test', 'g');
var s = 'JavaScript,VBScript,JScript and ECMAScript';
var re=/[a-zA-Z]+Script/g;// 使用全局匹配:
re.exec(s); // ['JavaScript']   每次返回一个元素,与直接用exec,全部值一起返回不同。
re.lastIndex; // 10  最后所在的位置

re.exec(s); // ['VBScript']
re.lastIndex; // 19

re.exec(s); // ['JScript']
re.lastIndex; // 27

re.exec(s); // ['ECMAScript']
re.lastIndex; // 42

re.exec(s); // null,表示匹配结束了,全部符合条件的都已经找出来了,再调用就从第一个开始循环。

6.在JSON中,一共就这么几种数据类型:

  • number:和JavaScript的number完全一致;
  • boolean:就是JavaScript的truefalse
  • string:就是JavaScript的string
  • null:就是JavaScript的null
  • array:就是JavaScript的Array表示方式——[]
  • object:就是JavaScript的{ ... }表示方式。

JSON的字符串规定必须用双引号"",Object的键也必须用双引号""

把对象序列化成JSON格式的字符串:

var xiaoming = {name: '小明',age: 14,gender: true,height: 1.65,grade: null,'middle-school': '\"W3C\" Middle School',skills: ['JavaScript', 'Java', 'Python', 'Lisp']
};JSON.stringify(xiaoming); // '{"name":"小明","age":14,"gender":true,"height":1.65,"grade":null,"middle-school":"\"W3C\" Middle School","skills":["JavaScript","Java","Python","Lisp"]}'

按缩进输出:

JSON.stringify(xiaoming, null, '  ');
/*结果如下
{"name": "小明","age": 14,"gender": true,"height": 1.65,"grade": null,"middle-school": "\"W3C\" Middle School","skills": ["JavaScript","Java","Python","Lisp"] }
*/

指定属性输出:

JSON.stringify(xiaoming, ['name', 'skills'], '  ');
/*结果如下
{"name": "小明","skills": ["JavaScript","Java","Python","Lisp"]
}
*/

或者用toJSON()的方法指定属性序列化输出:

var xiaoming = {name: '小明',age: 14,gender: true,height: 1.65,grade: null,'middle-school': '\"W3C\" Middle School',skills: ['JavaScript', 'Java', 'Python', 'Lisp'],toJSON: function () {return { // 只输出name和age,并且改变了key:'Name': this.name,'Age': this.age};}
};JSON.stringify(xiaoming); // '{"Name":"小明","Age":14}'

还可以传入一个函数作为参数:

function convert(key, value) {if (typeof value === 'string') {return value.toUpperCase();}return value;
}JSON.stringify(xiaoming, convert, '  ');
/*结果如下,全部字符串变大写
{"name": "小明","age": 14,"gender": true,"height": 1.65,"grade": null,"middle-school": "\"W3C\" MIDDLE SCHOOL","skills": ["JAVASCRIPT","JAVA","PYTHON","LISP"]
}
*/

7.反序列化,把JSON格式的字符串还原成JavaScript对象:

JSON.parse('[1,2,3,true]'); // [1, 2, 3, true]
JSON.parse('{"name":"小明","age":14}'); // Object {name: '小明', age: 14}
JSON.parse('true'); // true
JSON.parse('123.45'); // 123.45

JSON.parse()还可以接收一个函数,用来转换解析出的属性

JSON.parse('{"name":"小明","age":14}', function (key, value) {// 把number * 2:if (key === 'name') {return value + '同学';}return value;
}); // Object {name: '小明同学', age: 14}

 

转载于:https://www.cnblogs.com/shen076/p/6169437.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ArcGIS风暴】ArcGIS创建栅格数据集色彩映射表案例--以GlobeLand30土地覆盖数据为例

矢量数据快速符号化,可以将常用的样式保存到样式符号库,栅格数据快速符号化,需要创建色彩映射表。本文以GlobeLand30土地覆盖数据为例,详解ArcGIS中创建与使用色彩映射表。 文章目录一、 ArcGIS色彩映射表介绍二、土地覆盖数据色彩…

Visual Studio 2019 16.3.10 初体验

Visual Studio 2019 版本 16.3.10 发布时间:2019 年 11 月 20 日 官网地址:https://visualstudio.microsoft.com/zh-hans/vs/ 介绍: https://devblogs.microsoft.com/visualstudio/dot-net-core-support-in-visual-studio-2019-version-16…

【ArcGIS风暴】GlobeLand30全球数据处理教程(批量投影转换、无效值处理、拼接)

本文讲述GlobeLand30全球数据批处理流程,主要步骤包括:批量分幅投影转换、批量分幅无效值处理、批量图幅拼接和成品展示。由于图幅数目和数据量较大,本文是采用Python代码批量实现的,有关Python的基本操作及处理案例,可…

Docker 私有仓库的搭建

Docker在2015年推出了distribution项目,即Docker Registry 2。相比于old registry,Registry 2使用Go实现,在安全性、性能方面均有大幅改进。Registry设计了全新的Rest API,并且在image存储格式等方面不再兼容于old Registry。去年…

请查收.NET MAUI 的最新学习资源

点击上方蓝字关注我们(本文阅读时间:3分钟)2022 年 5 月 23 日,.NET MAUI 正式发布。.NET MAUI 为您提供了一流的跨平台 UI 堆栈,面向 Android、iOS、macOS 和 Windows。我们很高兴地宣布,有几种不同的学习 .NET MAUI …

C语言试题151之求 0到7 所能组成的奇数个数。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:求 0—7 所能组成的奇数个数…

腾讯2016春招之算法编程解析

第一道题:求有删除情况的最长回文子串 题目: 解题思路: 这个题严格意义上来说,删除了字符就谈不上回文串了,既然有删除,那估计考察的不是回文串,而是其他的,但是这个东西又有回文串的…

Windows下Visual studio 2013 编译 Audacity

编译的Audacity版本为2.1.2,由于实在windows下编译,其源代码可以从Github上取得 git clone https://github.com/audacity/audacity。 1. 编译WxWidgets Audacity使用wxWidgets作为GUI的框架,Audacity2.1.2需要wxWidgets 3.0.2,所以…

[转]解决Android studio升级到3.5的一些问题

最近Android studio升级到最新的3.5以后,出现了很多问题,记录一下: 1.NDK Resolution Outcome: Project settings: Gradle model version5.4.1, NDK version is UNKNOWN 这个是因为升级到3.5以后,原来的ndk被删除了,在…

【EPS精品教程】EPS2016三维测图版安装教程(附EPS2016安装包下载地址)

文章目录 一、安装过程二、软件安装包下载EPS地理信息工作站是北京清华山维新技术开发有限公司历经十五年精心研发和打造,为满足“以地理信息服务为中心”的信息化测绘生产需求而推出的测绘生产活动多种业务模块集成化软件系统。主要功能有: (1)测绘与地理信息多业务模块集…

据廖雪峰python3教程----python学习第十三天

在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。 编写一个名…

《增广贤文》

(《增广贤文》),并非吾原创。其中人生之道理,今之看来,虽有偏激之处,未尝不有警醒之用。吾辈取精去糟,察纳雅言即可。———————————————————————————————————…

禁锢自己的因素,原来有这么多

2022年的7月,朋友圈都能看到喜庆的时刻,庆祝香港回归25周年,这确实是一个具有伟大里程碑的意义。同时也是建党101周年,满满的荣誉感,隔着朋友圈都能感受到喜庆。家事国事天下事,事事关心,关心但…

C语言试题152之一个偶数总能表示为两个素数之和

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:一个偶数总能表示为两个素数…

[转]Xshell连接win10 Linux子系统

配置SSH服务: sudo apt-get remove --purge openssh-server ## 先删ssh sudo apt-get install openssh-server ## 在安装ssh sudo rm /etc/ssh/ssh_config ## 删配置文件,让ssh服务自己想办法链接 sudo service ssh --full…

有两个地方,用到了javabean对象和属性字符串值之间的转换

1.有两个地方,用到了javabean对象和属性字符串值之间的转换 2.一个是接入层spring mvc,将json字符串参数转换为javaBean。通过RequestBody javaBean方式 3.另一个是,mybatis中javeBean对象与数据库字段值之间的转换。 在sql语句的insert/upda…

【EPS精品教程】EPS2016三维测图软件常用快捷键(建议收藏)

EPS2016三维测图软件常用快捷键(建议收藏) 状 态键盘位置功能名称功能描述选择Shift拖点按下鼠标左键移动光标,将目标点拖到其他位置C闭合使打开的当前线闭合,闭合的当前线打开X回退一点从当前点回退一点Shift+X回退多点从当前点开始删除多点(到光标指向点)Ctrl+T删除删除当…

记一个并发规则验证实现

最近在做一个简单的风控,其中有一块需求是这样的,当主请求参数到达后,会根据这些参数,看调起几个并发规则,这些规则各自有自己的验证逻辑,每个规则执行时间长短都不确定,当规则 执行完后&#x…

EIGRP个人学习笔记

【理论部分】1、EIGRP的主要特征:①Cisco专有协议(高级dv路由);②支持VLSM; ③触发、增量更新;---------减少带宽的占用④支持多层网络协议ApplleTalk,IP 和 Novell Netware等协议;⑤收敛速度快;----------采用dual算法…

C语言试题153之判断一个素数能被几个 9 整除

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:判断一个素数能被几个 9 整除…