【☆】javascript数据类型拾遗
一、Array对象
1.两个数组能用< > == ===做比较吗?
答:数组可以用> <进行矩阵比较,比如a=[1,2,3] b=[1,2,4],那么a<b,如果a的数值长度增加,比如a=[1,2,3,1],那么结果还是a<b。而如果数组的长短和数据项大小都相同,那么ab怎么比较都是false。
所以我们可以知道数组的比较规则:从索引0开始,只要二者比较出结果,即停止比较,返回比较结果。
2.两个空数组相等吗?[]==[]?
答:不相等,等同于两个空对象比较,有法比较吗?所以false。
3.变态使用数组的方法:x=array.sort;【任意方法名】x();会产生什么效果?
答:只能是报错。
4.变态数组[,,]的长度?现有成员数目?join('1')会显示什么?
答:数组将,号的解析undefined,长度也是undefined,但是成员却是两个undefined,join('1')会显示 1 。
5.给数组元素变态的加上一对[],比如[[[[1]]]],它和数值1是什么关系?
答:不论加多少[],都是换汤不换药,1还是1,所以1==[[[[1]]]]
6.如何对字符数组进行降序排序?
答:sort方法中的function参数的返回值指定排序方式,如果返回的两个参数差值是大于零的升序拍,等于0并排。小于零降序排。所以我们只需稍微修改sort的两个参数的表现形式,变成function(a,b){return a.charCodeAt(0)-b.charCodeAt(0);}就可以了。
二、Number类型
1.var x=1,x.toString()和1.toString()有什么区别?
答:前者输出1,后者错误,因为数值没有toString()方法。
2.如果非想用一个数值调用toString方法怎么办?
答:用1..toString();
3.问题2多点几个点行不?
答:就只能俩点,多了不行!
4.parseInt('011')会得到什么?
答:在ECMAScript3浏览器下(IE8以下老版本)会输出9,因为parseInt遇见0或0x会把字符串当成八、十六进制解析,而ECMAScript5却不支持8进制,直接输出11,但是还没有放弃16进制。
三、RegExp对象
1.正则对象有哪三种有用的方法?
答:reg.test(string):检测目标字符串是否含有正则表达式的内容,如果有则返回true,否则false。
reg.exec(string):检测目标字符串是否含有正则表达式匹配的内容,如果有则返回匹配到的字符串,没有返回"".
reg.complie(regExp):将reg的正则表达式改变为regExp。返回值是替换后的正则表达式。
2.正则表达式的test(null) 和 test(),二者匹配的项是什么?
答:test:返回值为布尔,如果匹配成功返回true。exec:返回匹配成功的字符串。complie:返回值为正则表达式,用途是更换当前正则对象的匹配内容。
正则表达式的test 方法会把 null看成字符串"null",而空则被看成"undefined". 相似的方法是:exec 。但是complie方法比较特殊,对于null和其他方法处理一致,但是当为undefined时,就变成了 /(?:)/,很奇特。
四、Function对象
1.你不知道的function对象的默认属性。
答:有一个name属性是函数对象特有的,值就是函数名,如果是匿名函数,这个值就是"",而如果该函数对象时通过new Function()出来的,默认值是"anonymous"--匿名的
2.当我eval一个函数名的时候会发生什么?
答:会将该函数的函数体整出来,但是该函数不会执行。typeof这个eval会告诉你这是一个 function;如果eval的是一个匿名函数名,即eval(),那么会返回undefined。
3.如果我给函数的name属性赋值,结果会是怎样?
答:name属性是只读的,不能赋值!
4.function定义函数和new Function生成函数对象有什么区别?
答:其实二者在实现功能方面没什么区别,区别在于闭包上。function声明函数如果在一个函数体内,则会形成闭包,而new Function则不会形成闭包。
5.如果我的函数名和变量名重复了,怎么办?
答:这得分情况。
如果我的变量声明了但是没有赋值,那么以函数名为准。不管谁先声明。
如果我的变量声明了也赋了具体的值,那么以变量为准,不管谁先声明。
五、Object类型
1.ECMAScript5新增特性Object.getPrototypeOf([object]) 会返回什么?
答:其实就是得到该参数的__proto__这个指针所指向的内容。
可以知道如下等式:[object].__proto__=[object].constructor.prototype=Object.getPrototypeOf([object])
[object].constructor=[object].constructor.prototype.constructor
2.一个function的constructor.prototype和一个变量的constructor.prototype是什么?
答:前者是一个空函数
后者根据不同的数据类型会有不同。
自定义对象:[object object]
RegExp对象://
Number对象:0
Array和String:空
null和undefined:报错
3.如何对对象进行深度克隆?(不是有cloneNode方法么为什么还要?cloneNode是克隆节点的呀笨蛋!)
答:思路是这样的,a.先找到待克隆对象的constructor指向,这样就找到了创建该对象的父类。
b.有了父类对于普通对象来说New就可以了。可是如果待克隆对象是Date Array String Number的话,我们得不到它的默认值,所以针对这三类我们还要在构造时把待克隆对象的valueOf()传进去。 而另一种对象json就更为复杂,即时new constructor也不能满足深度克隆,需要使用ECMAScript5定义的下列方法:s = JSON.stringify(obj), //系列化对象 newobj = JSON.parse(s); //反系列化(还原)
c.做好了这些一个支持IE8以上及其他新版本浏览器的对象深度克隆就可以了。
function cloneObject(obj) {if (!obj.valueOf()) {var cstr = new obj.constructor();}else if(window.JSON) {var s = JSON.stringify(obj);var cstr = JSON.parse(s);for (var item in obj) {cstr[item] = obj[item];}} else {cstr = new obj.constructor(obj.valueOf());}return cstr;}
4.如何实现ECMAScript5的Object的create方法?
答:Object.create有两个参数,第一个是某类的原型。第二个是属性,可选。方法返回一个对象。因此我们可以通过下面的代码实现这一方法:
Object.prototype.create=function(objProto,jsonpro){function XClass(){}XClass=objProto.constructor;var obj=new XClass();if(jsonpro) {for(var item in jsonpro){obj[item]=jsonpro[item];}}return obj; }
5.obj.prototype.sayname=function(){}和obj.prototype={sayname:function(){}}有什么区别吗?
答:前者的原型constructor指向obj,而后者原型的constructor则指向了Object。
6.ECMAScript5下一个对象如何防篡改?有哪些级别?
答:使用Object.preventExtensions(obj)这种方法。对象被防篡改后就不会再被随意增加属性,但可以修改删除属性。
使用Object.seal(obj)方法,对象被防篡改之后就不可以删除属性,但是可以更改。
使用Object.freeze(obj)方法,对象不可以删除不可以修改。
7.遇到如下这种变态的操作,会得出什么结果呢?
function foo(){// => 执行顺序3:foo.abc => alert(1)
foo.abc = function () {alert(1);};
// => 执行顺序4:obj.abc => alert(2)
this.abc = function () {alert(2);};// => 执行顺序5:window.abc => alert(3)
abc = function () {alert(3);};// => 执行顺序6:局部变量 var abc = alert(4)
var abc = function () {alert(4);}; }// => 执行顺序1:obj.abc => alert(5)
foo.prototype.abc = function () {alert(5);};// => 执行顺序2:foo.abc => alert(6)被foo对象实例化过程中产生的abc覆盖
foo.abc = function () {alert(6);};var obj = new foo();obj.abc(); foo.abc();
这个问题涉及到的知识点:
使用方法优先在对象自身上找,如果没有就在原型链上找,如果自身和原型链有冲突,使用自身的方法。
最后编译的函数会覆盖前面定义的函数
obj 是 foo 构造函数的实例对象,在调用 abc 方法时会优先查找实例方法,如果找不到 abc 实例方法,就会去原型链上继续搜索是否存在名为 abc 的方法,直到原型链的顶端。本例中存在实例方法,所以返回值为 2.
foo.abc() 为什么不是 6 呢?因为在实例化 foo 构造函数时,其函数中的 foo.abc 声明覆盖了后面的声明,所以返回值是 1
8.给call方法传入null或undefined会有什么结果?
答:会把this对象变为window。
六、String对象
1.字符串中出现转义字符'\'怎么办?
答:看转义后的内容是什么,如果只是\n啥的长度会比眼见的缩减1.
2.类似这种var str = '\u104A0';这个str的长度是多少?
答:是2,不要忽视转义字符啊,一般情况下,有'\'出现,字符串的长度就比眼看到的要小。题目输出的结果是这样的:၊0,这个方块就是\u104a
3.有什么最简单的将 纯数字型 字符串转为数字的方法么?
答:javascript中如果想要把字符串转变为数字,最好的方法还是用parseInt吧。不过最简单的方法就是 比如var s="12" ; +s就是12这个数字。如果s中含有非数字字符,那么得到的就是NaN。
X.其他
1.乱使用关键字的后果:a={class:'一班',name:'jack'}; a.class是什么?
答:根据浏览器的不同,效果也不同,在FF下(其他浏览器好像和FF一致),会输出一班,而在IE8会报错。
2.对undefined赋值会有什么效果?对undefined typeof将获得什么?
答:对undefined赋值听起来很疯狂,可是在IE8下偏偏就成功了。undefined的typeof是undefined.
3.如果另a为window,那么a.a==a返回什么?
答,这不就是一个循环么,window的window属性不还是为window么。所以返回true。
5.如果遇到如下情况,得到的结果是什么?
if (!("a" in window)) {var a = 1; } alert(a);
答:输出undefined,因为javascript引擎在初始化的时候,会把变量声明(而不是赋值)在其所在的作用域提前置顶。
6.如果给一个已赋值变量赋值为一个无返回值的函数执行体,那这个值变为什么?
答:变为undefined,这是自动返回的。
转载于:https://www.cnblogs.com/JhoneLee/p/3543578.html
【☆】javascript数据类型拾遗相关推荐
- 【前端工程师手册】JavaScript作用域拾遗
[前端工程师手册]JavaScript作用域拾遗 昨天总结了一些作用域的知识[前端工程师手册]JavaScript之作用域,但是发表完发现忘记了一些东西,今天拾个遗. 昨天说到了JavaScript中 ...
- 从javaScript数据类型开始了解垃圾回收机制
一. javaScript数据类型 javaScript 数据类型分为:基本数据类型.引用数据类型 基本数据类型 分类:Number.String.Boolean.Null.Undefined.Sym ...
- JavaScript数据类型 typeof, null, 和 undefined
JavaScript 数据类型 在 JavaScript 中有 5 种不同的数据类型: string number boolean object function 3 种对象类型: Object Da ...
- 18100出多少取整_关于JavaScript数据类型,你知道多少?
JavaScript的数据类型是每一个前端开发者必须要掌握的内容,也是最基础最重要的角色之一,关于JavaScript数据类型你知道多少? JavaScript一共有7种数据类型:String.Num ...
- JavaScript学习总结(2)——JavaScript数据类型判断
最近做项目中遇到了一些关于javascript数据类型的判断处理,上网找了一下资料,并且亲自验证了各种数据类型的判断,在此做一个总结吧! 一.JS中的数据类型 1.数值型(Number):包括整数. ...
- JavaScript筑基篇(二)-JavaScript数据类型
说明 介绍JavaScript数据类型 目录 前言 参考来源 前置技术要求 JavaScript的6种数据类型 哪6种数据类型 undefined 类型 null 类型 boolean 类型 numb ...
- Javascript数据类型共有六种
Javascript数据类型共有六种 /* var box; alert(typeof box); // box是Undefined类型,值是undefined,类型返回的字符串是undefinedv ...
- javascript 数据类型与类型转换
JavaScript 数据类型 值类型(基本类型): 字符串(String) 数字(Number) 布尔(Boolean) 空(Null) 未定义(Undefined) Symbol 注:Symbol ...
- JavaScript数据类型基本数据类型与引用数据类型的区别
JavaScript数据类型 1.JavaScript判断数据类型 typeof操作符 使用typeof操作符可以返回变量的数据类型 typeof操作符有带括号和不带括号两种用法 typeof (变量 ...
最新文章
- 三种方法,用Python轻松提取PDF中的全部图片
- eclipse 插件开发过程中遇到的一堆问题(急待解决)
- [JavaScript]为JS处理二进制数据提供可能性的WEB API
- boost::sort模块实现提供多种分布的灵活随机数生成器的测试程序
- 浏览器angent分析工具
- EntityFramework Core自动返回SQL语句
- Axure教程 axure新手入门基础(3) 简单易上手
- SQL Server 2019中SQL表变量延迟编译
- 2乘2数组第一维_苏教版三年级下册 第一单元“两位数乘两位数”第2课
- 中标麒麟安装php环境,中标麒麟V6下wine完美运行通达信
- Sketch的下载与安装
- 蒙哥英语原版阅读器android,蒙哥英语原版阅读器安卓版
- 【Maya】移动、父子关系、轴心点、分组关系
- mc洪磊-2012经典语言大合集 音乐无处不在 老婆无人替代 好听音乐 就用酷狗
- env下pkgs --update没有反应直接退出的问题解决方法
- factorial of n
- ThinkPhp5.0.24 JWT报错 ‘“kid“ empty, unable to lookup correct key‘解决办法
- 软件需求管理用例方法 pdf_德国易用的需求管理方法-tenowork敏捷管理
- 程序员百度云干货 不谢~~~~~~
- 寒假作业1:打印沙漏