私人定制javascript中对象小知识点(Only For Me)
废话不多讲,先上笑话,然后再,。看懂这个的说明你的节操已经不再了。
晚饭后去理发店理发。。。割了吧。。。老板问我怎么剪,我悠悠的来一句往帅了剪。。。高潮往往令人想不到。。。。旁边一在焗油烫头发的大妈说到 别这样为难老板,人家赚点钱不容易。。。
首先如果你是高手那么请出门右转,如果你是菜鸟那么恭喜你,go on吧
全局对象
在javascript程序中任何位置,都可以拈来就用的这种东西,是全局对象的属性.那么属性所在的对象也就是全局对象了。
当javascript解释器启动时(或者任何Web浏览器加载新页面的时候),它将创建一个新的全局
对象,并给它一组定义的初始属性:
1.全局属性,比如undefined,Nan
2.全局函数,例如isNaN(),parseInt()
3.构造函数,比如Date(),String()
4.全局对象,比如Math和JSON()
代码中声明了一个全局变量,这个全局变量就是全局对象的一个属性
以上代码纯属占篇幅,上代码
var s="hello world!";
var tempstr=s.substring(s.indexof(" ")+1);
有没有有想过为什么s会调用substring()方法呢?
答案是只要引用了字符串s的属性,javascript就会将字符串值通过new String(s)的方式转换成对象,
这个对象继承了字符串的方法,并被用来处理属性的引用。一旦属性引用结束,这个新创建的对象就会销毁。
举例为证:
var s="test";
s.len=4; //给它设置一个属性
var temp=s.len;
console.log(temp) //undefined
解释:第二行代码创建一个临时字符串对象,并给其len属性赋值为4,但是马上就销毁这个对象。第三行试图访问临时属性,
修改只是发生在临时对象身上,但这个临时对象并未保存。
这就引出一个概念存取字符串,数字或布尔值的属性时创建的临时对象叫做包装对象。
知道了这个就可以区分什么时候字符串和字符串对象等等概念。具体有什么大的用处,我还真心不太了解。
包装对象
首先什么是包装对象,就是将普通的非对象的常规类型用某种方式包装成了一个对象
答案是可以通过某些内置构造函数String()//Number()限时创建包装对象
var S=new String("marry you");
console.log(S); //String {0: "m", 1: "a", 2: "r", 3: "r", 4: "y", 5: " ", 6: "y", 7: "o", 8: "u", length: 9}
可以用==和===来区分是否是包装对象,==将原始值和包装对象视为相等,当"==="视为不等,也可以通过typeof
原始值和对象有着根本的区别是,原始值是不可更改的。虽然字符串看上去有点例外。
比如
var s="marry me";
console.log(s.toUpperCase()); //返回"MARRY"
console.log(s); //"marry me" 但并没有改变s的值
s=s.toUpperCase(); console.log(s); //MARRY ME
原始值是无法更改的,任何方法都无法更改一个原始值,比如说通过指定索引来修改字符串中字符,javascript是禁止的。实际上返回给s的是一个新的字符串,之前的s其实是存在于内存中的,只不过没有被引用而已(有点小疑惑对应这个结论,多谢@泰山宏图的提醒)。
对象转换为原始值
那么怎么实现对象转化为原始值呢
常见的有对象到字符串和数字到字符串等等
所有对象继承了两个转换方法。
第一个是toString()
作用是返回一个反映这个对象的字符串。
第二个是valueOf()
作用是如果存在任意原始值,它就默认将对象转换为表示它的原始值。对象是复合值,而且大多数对象无法真正表示
一个原始值,默认返回对象本身,非原始值。(其实这个知识点还可以挖的更深,对此我只能浅尝而止啦)
例如:[1,2,4].toString();// "1,2,3"
(function(x){console.log("marry you");}).toString(); //"function (x){console.log("marry you");}"
new Date(2022,2,2).toString();//"Sat Mar 02 2222 00:00:00 GMT+0800 (中国标准时间)"
var d=new Date(2020,2,22);
d.valueOf();//
那么为啥会出现的不太一样呢,因为很多内置类都对toString()做了修改了。
所以如果你要想使用toString()来反应这个对象的字符串类型
Object.prototype.toString().call(obj);//这样得到的就是最原始的toString()的含义
如:Object.prototype.toString.call([1,2,4]); //"[object Array]"
如果你用[1,2,4].toString();//"1,2,4" 如果你得出这个鬼东西,我就只能安慰你,哥们不哭,站起来撸
变量作用域
在此简单说说变量的作用域
首先变量的作用域是变量的作用范围区域,特别给从后端程序员转到前端的程序员说一点,此处的作用域不是用{}块级来
区分作用域的,而是用一个function函数来区分作用域的也叫做函数块级作用域。
比如for(var i=0;i<1;i++){console.log(i);} console.log("还是在这个作用域的i:",i) //0,还是在这个作用域的i: 1
首先函数体内,局部变量的优先级高于同名的全局变量。
var a="global";
function testscope(){
var a="local";
return a;
}
testscope();//"local"
so作用域还有很多需要整理的,未完待续。如果你觉得对你有一点点帮助,求点推荐。如果没有,不要点推荐旁边的按钮。
要不然我会来找你的...
私人定制javascript中对象小知识点(Only For Me)的更多相关文章
- 私人定制javascript中函数小知识点
函数的定义 首先在javascript中,函数就是对象,程序可以随意操控它们.比如,可以给它们设置属性,甚至调用它们的方法.函数使用function关键字来定义.它既可以用在函数定义表达式,也可以用在 ...
- 私人定制javascript中数组小知识点(Only For Me)
先上笑话,1.刚看到一个游泳的,想起公司组织去三亚旅游,老板跳海里,各种挣扎,捞上来老板第一句话:我记得我会游泳的啊. 2.媳妇说:老公对不起,我把你新买的自行车撞散架了! 老公:没事宝贝,你若安好, ...
- 关于JavaScript中对象的继承实现的学习总结
一.原型链 JavaScript 中原型链是实现继承的主要方法.其主要的思想是利用原型让一个引用类型继承另一个引用类型的属性和方法.实现原型链有一种基本模式,其代码如下. function Super ...
- javascript中对象的深度克隆
记录一个常见的面试题,javascript中对象的深度克隆,转载自:http://www.2cto.com/kf/201409/332955.html 今天就聊一下一个常见的笔试.面试题,js中对象的 ...
- 私人定制自己的linux小系统
私人定制自己的linux小系统 一.前言 linux操作系统至1991.10.5号诞生以来,就源其开源性和自由性得到了很多技术大牛的青睐,每个linux爱好者都为其贡献了自己的一份力,不管是在 ...
- javascript中对象字面量的理解
javascript中对象字面量与数组字面量 第一部分 我们知道JavaScript中的数据类型有基本数据类型和引用类型,其中Object类型就是非常常用的类型.那么如果创建一个Object类型的实例 ...
- JavaScript中对象的属性
在JavaScript中,属性决定了一个对象的状态,本文详细的研究了它们是如何工作的. 属性类型 JavaScript中有三种不同类型的属性:命名数据属性(named data properties) ...
- JavaScript中对象转换为原始值的规则
JavaScript中对象转换为原始值遵循哪些原则? P52 对象到布尔值对象到布尔值的转换非常简单:所有的对象(包括数字和函数)都转换为true.对于包装对象亦是如此:new Boolean(fal ...
- 【你不知道的javaScript 上卷 笔记7】javaScript中对象的[[Prototype]]机制
[[Prototype]]机制 [[Prototype]]是对象内部的隐试属性,指向一个内部的链接,这个链接的作用是:如果在对象上没有找到需要的属性或者方法引用,引擎就 会继续在 [[Prototyp ...
随机推荐
- SQL server 2005 PIVOT运算符的使用
原文:SQL server 2005 PIVOT运算符的使用 PIVOT,UNPIVOT运算符是SQL server 2005支持的新功能之一,主要用来实现行到列的转换.本文主要介绍PIVOT运算符的 ...
- 调整CentOS的文字登陆界面的分辨率
通过文字界面登陆到系统,切换到root权限. 用vi打开 /boot/grub/menu.lst 文件 ,因为menu.lst是grub.conf文件的快捷方式,终于打开的还是grub.conf文 ...
- SQL优化策略高级优化经常使用-1(The Return Of The King)
1 经常使用的优化策略 1.1 语句 1.1.1使用实际的列名 当我们查询SQL语句时.你是否觉得使用实际的列名比使用*更快呢?答案是肯定的. 为了证实这一点,感兴趣的朋友能够自己验证一下.我这 ...
- JavaScript变量作用域和内存问题(二)
执行环境是js中特别重要的概念,是指变量或者函数可以访问其他数据,定义自己的行为.每个执行环境都有一个与之相对应的变量对象,执行环境中定义的所有变量和函数都保存在这个变量中,我们看不到这个变量,但是后 ...
- php脚本生成google play url的下载链接,下载apk并自动反编译后获取android版本号
需求: get the offer tracking link follow the redirect to get google play url Go to http: ...
- Canvas rontate(旋转) 使用误区
context.setTransform(1,0,0,1,0,0);//重置转换为初始化状态 var angleInRadians = 45 * Math.PI / 180;var width = 4 ...
- 如何有效抓取SQL Server的BLOCKING信息
原文:如何有效抓取SQL Server的BLOCKING信息 转自:微软亚太区数据库技术支持组 官方博客 http://blogs.msdn.com/b/apgcdsd/archive/2011/12 ...
- Caused by: org.springframework.beans.NotWritablePropertyException
1.错误叙述性说明 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -h ...
- Android Studio Debug
小米4usb调试怎么打开?miui6进入开发者模式想要打开USB调试首先开启开发者模式.过去在MIUI V5版本时,小米手机开启开发者模式的方法是连续点击Anroid版本号.不过最新上市的小米4都搭载 ...
- 百度CSND博客在搜索栏中显示图片
原先以为百度搜索结果有图片是能够人为控制的,结果发现并非这样. 近期百度搜索结果的每一个条目左側出现了小图片,这一变化能够说是极大满足了用户的体验,不用进入站点就提前直观的推断出站点内容是否是自己要找 ...