1 js类型强制转化
1.1 Date强转
为何Date
强转之后构造体成了String
?
主要原因 :JS中
Date
除了是一个构造器
外,同时也是一个函数
,没有new
的时候,相当于调用了Date函数
,然后把返回值(一个字符串类型的日期)赋值给doArr
,并没有产生新的Date实例
,所以变量和Date构造器
没有什么关系,继承的都是String
这个构造器的方法和属性。
1 | //默认String和Date没什么关系 |
2 正则匹配
2.1 search
2.1.1 正则与undefined
特殊字面量明明都可以正常转成正则对象,那为何检测undefined
的时候,所有案例变量都匹配成功了?
主要原因 :
undefined
会转成/(?:)/
然后进行检测,正则中(?:pattern)
的意思是匹配pattern
但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用,因为/(?:)/
的pattern
值为空,所以上面正则的意思是匹配所有。
1 | var a = 4; |
2.1.2 正则与Object
oo
是一个空对象,它的字面量是{}
,但是为什么可以和案例变量都进行匹配。
主要原因 :
oo
传入search方法
中是[object Object]
,在正则中中括号的意思是匹配包含在括号中的任意字符。
1 | var a = 4; |
3 localeCompare
3.1 localeCompare与正则参数
就目前测试的相关数据结果表现,不管字符串中是什么内容,传入什么样的正则值,或者传入制表符
,空格
,和换行符
等等特殊字符
,localeCompare
都会返回正值。
1 | var a = 4; |
3.2 localeCompare判断
目前看来不管传入的子字符串
和原始字符串
是否存在包含关系,结果都不一定是正值
,在测试数据结果中不发现是单纯的通过两个字符串首字母进行对比。
3.2.1 两个字符串的首字母相同
首字母相同,但是得到的结果却不一定是正值,会根据子字符串的长度还有包含的字母不同,返回不同的值,但是这个具体处理逻辑我不太懂。
1 | console.log(strString);//hello watermelon |
3.2.2 原始字符串包含子字符串
传入的子字符串
是完全被包含于原始字符串
的,但是结果不一定都是返回正值
,子字符串长度不是一个参考值?
1 | console.log(strString);//hello watermelon |
3.2.3 localeCompare与特殊值
1 | console.log("-------------------测试undefined"); |
4 数据类型学习
常用的有六大数据类型,一般实例化对象的时候,都是new
关键词加上数据类型加上括号,今天突然想到如果不加括号怎样,然后发现两种情况下实例化的变量的值从表面上看几乎是一模一样的的,但是在做等式匹配的时候,不管是用全等还是用普通等式,都是返回的false
.
主要原因 :
基本类型
是通过值
来比较
,而对象
(Object,Boolean,Number,String,Array,Date,Function)及普通对象
通过指针
指向的内存
中的地址
来做比较。
1 | var temp_O = new Object; |