惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Privacy & Cybersecurity Law Blog
WordPress大学
WordPress大学
Last Week in AI
Last Week in AI
腾讯CDC
人人都是产品经理
人人都是产品经理
小众软件
小众软件
V
Visual Studio Blog
S
Secure Thoughts
J
Java Code Geeks
V
V2EX
量子位
The Hacker News
The Hacker News
酷 壳 – CoolShell
酷 壳 – CoolShell
Security Latest
Security Latest
博客园_首页
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Spread Privacy
Spread Privacy
博客园 - 叶小钗
T
Threat Research - Cisco Blogs
Security Archives - TechRepublic
Security Archives - TechRepublic
T
Tailwind CSS Blog
Cloudbric
Cloudbric
S
SegmentFault 最新的问题
AI
AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Application and Cybersecurity Blog
Application and Cybersecurity Blog
IT之家
IT之家
T
Tenable Blog
S
Security @ Cisco Blogs
月光博客
月光博客
雷峰网
雷峰网
博客园 - 【当耐特】
Know Your Adversary
Know Your Adversary
C
Cybersecurity and Infrastructure Security Agency CISA
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
爱范儿
爱范儿
Attack and Defense Labs
Attack and Defense Labs
博客园 - 三生石上(FineUI控件)
Hacker News - Newest:
Hacker News - Newest: "LLM"
有赞技术团队
有赞技术团队
N
News and Events Feed by Topic
阮一峰的网络日志
阮一峰的网络日志
TaoSecurity Blog
TaoSecurity Blog
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The Cloudflare Blog
K
Kaspersky official blog

博客园 - 柠茶

asp.net webapi 参数绑定总结 asp.net webapi 参数绑定总结 javascript变量,作用域和内存问题 javascript基本概念 javascript中所谓的“坑”收录 JS调用webservice的两种方式 反射体验(转) 什么是Emit,什么是反射,二者区别到底是什么?(转) 关于可空类型 学习IIS & MVC的运行原理 (转) MVC-READ5(asp.net web from PK asp.net MVC) MVC-READ4 MVC-READ3(视图引擎主要类关系图) MVC-READ2 MVC-READ1 @@ERROR和@@ROWCOUNT的用法 异常以及异常处理框架探析(转) .Net深入学习序列化和反序列化 (转) 可扩展对象模式(转)
javascript引用类型
柠茶 · 2015-03-08 · via 博客园 - 柠茶

1:创建对象的方式:new和对象字面量

var finn=new Object();finn.name="fiona";finn.toString()
"[object Object]"
var finn={};finn.name="fiona";finn.toString()
"[object Object]"

2:在使用对象字面量语法时,属性名也可以使用字符串

var person={name:"finn",age:30};person.name
"finn"
var person={"name":"finn","age":30};person.name
"finn"

3:在通过对象字面量定义对象时,实际上不会调用Object构造函数,Firefox2及更早版本会调用

4:对象字面量是向函数传递大量可选参数的首选方式。最好做法:对必需值使用命名参数,使用对象字面量封装多个可选参数

function person(obj)
{
if(typeof obj.name=="number")
console.log(obj.name);
};
person({name:1,age:2})
VM813:5 1

5:访问对象属性两种非法:点表示法和方括号表示法,方括号表示法优点可以通过变量访问属性.如果属性名中包含会导致语法错误的字符,或者属性名使用的关键字或保留字,也可以使用方括号表示法

var person={name:"fiona"};person["name"]
"fiona"
var person={name:"fiona"};person.name
"fiona"

6:对象字面量中,左花括号就表示的是一个表达式的开始,而不是一个语句块的开始。

为什么要 eval这里要添加 “("("+data+")");//”呢?

原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语 句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始 和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]

对于这种写法,在JS中,可以到处看到。

如: (function()) {}();  做闭包操作时等。

var person="{age:1}";var x=eval('('+person+')');x.age
1
var person="{'age':1}";var x=eval('('+person+')');x.age
1
var person="{'age':'1'}";var x=eval('('+person+')');x.age
"1"
var person="{\"age\":1}";var x=eval('('+person+')');x.age
1
var person="{\"age\":1,friend:{age:2}}";var x=eval('('+person+')');x.age
1
var person="{\"age\":1,friend:{age:2}}";var x=eval('('+person+')');x.friend.age
2

7:函数立即执行

var x=function xx() {console.log(2);}()
VM1192:2 2
undefined
function xx() {console.log(2);}()
VM1220:2 Uncaught SyntaxError: Unexpected token )
(function xx() {console.log(2);}())
VM1227:2 2
undefined
(function xx() {console.log(2);})()
VM1231:2 2
undefined

 8:()是一个分组操作符,它的内部只能包含表达式

9:Array:可以保存任何类型的数据;大小可以动态调整;创建方法new和数组字面量;可以省略new;length非只读

var colors=new Array("10",1,new Object());colors[0]
"10"
var colors=Array(2);colors[0]
undefined
var colors=Array("2");colors[0]
"2"
var colors=[];colors[0]
undefined
var colors=[];colors[1]
undefined
var colors=[];colors[2]
undefined
var colors=[];alert(colors[2])
undefined
var colors=[1,2,3];alert(colors[2])
undefined
var colors=[1,2,3];alert(colors[2]);colors.length=2;alert(colors[2]);
undefined

9.1:检测数组

var colors=[1,2,3];alert(colors[2]);colors.length=2;alert(colors[2]);colors instanceof Array
true

var colors=[1,2,3];alert(colors[2]);colors.length=2;alert(colors[2]);colors instanceof Array;Array.isArray(colors);
true

function xx (){console.log(Array.isArray(arguments));};xx()
VM2211:2 false

function xx (){console.log(Array.isArray(arguments));console.log(arguments[0])};xx(1)
VM2212:2 false
VM2212:2 1

9.2: 转换方法:toString(),valueOf(),join

var finn=["a","b",{}];finn.toString();
"a,b,[object Object]"
{}
undefined
({})
Object {}
alert({})
undefined
finn.valueOf()
["a", "b", Object]
finn[3]=1
1
finn.toString()
"a,b,[object Object],1"
finn.valueOf()
["a", "b", Object, 1]
finn.join("|")
"a|b|[object Object]|1"