JavaScript(基础知识)

1.JS中数据类型有哪些

a.JavaScript包含5种基本数据类型,分别是 Undefined / Null / Boolean / Number / String ,基本数据类型就这五种。

b.JavaScript包含一种类型,Object,Object类型是所有对象的基类。

c.JavaScript中并没有浮点数和整数之分,统一用Numer来表示。

2.变量,作用域,内存问题

(一)变量

a.JavaScript变量分为两种:基本类型和引用类型。其中基本类型就是前面提到的5种基本数据类型,引用类型就是前面提到的 Object 以及基于它的其他复杂数据类型。

\star 基本数据类型:在内存中占据实际大小的空间,赋值的时候,会在内存中创建一份新的副本。保存在 栈内存 中。(按值访问)

\star 引用类型:引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存中堆内存中的对象,赋值的时候,只是创建了一个新的指针指向对象。保存在 堆内存 中。 

b.变量的内存分配:基本类型在内存中是实际的值;而引用类型在内存中就是一个指针,指向一个对象,多个引用类型可能同时指向同一个对象。确定一个变量是哪种基本类型用typeof操作符。确定一个变量是哪种引用类型用instanceof操作符。

图解1

(二)作用域:变量是在某个特定的作用域中声明的,作用域决定了这些变量的生命周期,以及哪些代码可以访问其中的变量。

a.变量是在某个特定的作用域中声明的,作用域决定了这些变量的生命周期,以及哪些代码可以访问其中的变量。

b.JavaScript作用域只包括全局作用域和函数作用域,es6中加入了块级作用域,let声明。

c.作用域是可以嵌套的,从而形成作用域链。由于作用域链的存在,可以让变量的查找向上追溯,即子函数可以访问父函数的作用域=>祖先函数的作用域=>直到全局作用域,这种函数我们也称为闭包()

(三)内存问题:JavaScript引擎具有自动垃圾回收机制,不需要太关注内存分配和垃圾回收问题。这儿就不展开了!

3.JS引用类型

Object是唯一的复杂数据类型,引用类型都是从Object类型上继承而来。JavaScript又可以往引用类型上加属性和方法。那么,函数也可以!这也是JavaScript函数强大和复杂的地方。也就是说:函数也可以拥有自定义方法和属性

\star  Array:数组类型

\star Date:日期类型

\star RegExp :正则表达式类型

\star  Function:函数类型

\star  等等

4.typeOf返回的数据类型

console.log(typeof undefined); //undefined

console.log(typeof 123); //number

console.log(typeof NaN); //number

console.log(typeof '123'); //string

console.log(typeof true); //boolean

console.log(typeof [1,2,3]); //object

console.log(typeof {"id": 11}); //object

console.log(typeof null); //object

console.log(typeof console.log); //function

console.log(typeof typeof []); //string

注意:

typeof 返回的任何一个结果都是字符串类型 如:'number','bpolean' 都是以字符串的形式存在的 

判断一个数组类型:

a.从构造函数入手,obj instanceof Array ,typeof a != 'undefined' 判断a变量存在。而instanceof只会返回一个布尔值。

b.调用对象原型中的toString方法, Object.prototype.toString.call(obj);因为很多对象继承的toString()方法被重写了,为了能够调用正确的toString()版本,也就是最原始的版本。可以使用Function.call()的方法,其中call可以这么理解,相当于obj去借用这个 Object.prototype.toString();

Object.prototype.toString.call(new Date());   //"[object Date]"

Object.prototype.toString.call(Window);    //"[object window]"

Object.prototype.toString.call(/./);  //"[object RegExp]" 

5.类型转换

对象在转换基本类型时,首先会调用 valueOf 然后调用 toString。并且这两个方法你是可以重写的。 

图解2

6.函数

a.函数的调用方式

(1)function 命令:function命令声明的代码区块,就是一个函数。function命令后面是函数名,函数名后面是一对圆括号,里面是传入函数的参数。函数体放在大括号里面。

(2)函数表达式:除了用function命令声明函数,还可以采用变量赋值的写法。

(3)Function构造函数定义:通过Function构造函数创建函数,可向构造函数中传入任意数量的参数,但值得注意的是传入的最后一个参数会作为函数体,而其他参数则作为参数传入函数中。用该方法去定义函数是不推荐使用的,因为该语法会导致解析两次代码,第一次解析常规ECMAScript代码,第二次解析传入构造函数的字符串,影响性能。

b.函数内部属性

(1) arguments:包含函数所有参数的伪数组, 其arguments.callee属性指向含有该arguments对象的函数。该属性可用于递归函数的函数调用

function factorial(num){

    if(num<=1){ return 1; }

    else{ return num*arguments.callee(num-1); }

}//好处:低耦合 

(2)this:函数执行的环境变量。

(3)caller:调用当前函数的函数引用。

c.函数的属性和方法

(1)length:该属性指定义函数时,需要传入参数的个数。使用为:函数名.length;

(2)prototype:原型函数。

(3)apply和call:方法均改变调用函数的环境对象,简而言之就是改变函数的this值。两者除了传入参数的方式不同外,没有什么区别。apply在传参时,可传入数组或伪数组arguments,call是将参数依次列出传入函数的

(4)bind():创建一个函数实例,其this值会被绑定到传给bind()函数的值。

注意:如果同一个函数被多次声明,后面的声明就会覆盖前面的声明。

(5)立即调用的函数表达式(IIFE)(function(){ /* code */ }());

(6)闭包: 闭包就是能够读取其他函数内部变量的函数,例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数.

var arr = [{name:"lyf",age:20},{name:"gulu",age:18}]; 

 function nameSort(name){

    return function(obj1,obj2){

        return obj1[name]-obj2[name]; }

}

arr.sort(nameSort("age"));

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容