
Watch the video:
Watch the video:
Watch the video:




This guide demonstrates multiple ways to iterate over a JavaScript object’s properties and values. There are many ways to do this, and each method is slightly nuanced, so for each method we’ll provide a detailed explanation, examples, and a description of when it should be used.
The first method we’ll cover is Object.entries. This method returns an array of an object’s string key-value pairs. There are a few interesting ways to use Object.entries.
forEachUsing the forEach method, we can access each entry individually. Notice that we are destructuring entry, and entry[0] is the key while entry[1] is the corresponding value.
const obj = { 'key1': 'value1', 'key2': 'value2' } Object.entries(obj).forEach(entry => { let [key, value] = entry; console.log(key, value); }) // output key1 value1 key2 value2 for...ofWe can use a slightly nicer syntax to achieve a similar outcome. Using for…of we can destructure each entry in the loop definition.
const obj = { 'key1': 'value1', 'key2': 'value2' } for (let [key, value] of Object.entries(obj)) { console.log(key, value); } // output key1 value1 key2 value2 Object.entries?As you can see from the examples above, the most valuable feature of Object.entries is that you have access to both the key and the value. So this is a desirable method to use when you know you’re going to operate on the object’s properties (keys) and the corresponding values.
Object.entriesThe main thing to consider when using Object.entries is that it will not return properties in the prototype chain. See the following example:
const someObj = { someProp: 123 }; let newObj = Object.create(someObj); newObj.newProp = 456; console.log(newObj.someProp); // => 123 console.log(newObj.newProp); // => 456 // Notice that `someProp` is missing here console.log(Object.entries(newObj)); // => [ [ 'newProp', 456 ] ] Now, this is probably what we want in most cases, but it’s something to be aware of.
Object.keys returns an array of an object’s enumerable property names.
Enumerable properties are properties set “via simple assignment or via a property initializer”. Since JavaScript objects have a lot of additional properties (e.g. constructor, __proto__), we don’t want to include these types of properties when operating on our object. They can be accessed directly, of course, but won’t be included when iterating over properties.
The usage is simple, see the following example:
const obj = { name: 'Levi Coffin', birthdate: '10/28/1798', city: 'Newport', state: 'Indiana' }; Object.keys(obj) // => [ 'name', 'birthdate', 'city', 'state' ] To iterate through the object’s properties, we can use forEach:
Object.keys(obj).forEach(key => { console.log(key); }); Or for...of:
for (let key of Object.keys(obj)) { console.log(key); } And to get the corresponding value, we can use the key for reference. Although, at this point, you ought to use Object.entries from the previous step:
for (let key of Object.keys(obj)) { let value = obj[key]; console.log(key, value); } Object.keys?As the method name implies, you should use Object.keys when you’re only interested in the keys (property names) of an object. If you’re also interested in the values, Object.entries is probably the right tool.
Object.keys is especially useful when we’re using an object to map data. Consider the following object:
const nameAgeMap = { 'Tom': 30, 'Susan': 28, 'Rob': 35, 'Claire': 22 }; Object.keys gives us access to an array of names.
Object.keys(nameAgeMap) // => [ 'Tom', 'Susan', 'Rob', 'Claire' ]Object.values is the counterpart to Object.keys, and returns an array of the object’s enumerable property values. We covered enumerable properties in the previous step, and this method simply returns the corresponding value for each enumerable property.
Similarly, we can iterate using forEach:
Object.values(obj).forEach(value => { console.log(value); }); Or for...of:
for (let value of Object.values(obj)) { console.log(value); } Object.values?Again, like its counterpart, you should use Object.values when you’re only interested in the object’s values.
Using the same map from the previous step:
const nameAgeMap = { 'Tom': 30, 'Susan': 28, 'Rob': 35, 'Claire': 22 }; We can get the corresponding list of values easily:
Object.values(nameAgeMap) // => [ 30, 28, 35, 22 ]for…in is similar to Object.keys except it iterates over all of an object’s enumerable properties (excluding Symbols).
In the following example, we’ll create an object newObj from an existing object obj.
let obj = { inheritedProp: 'hello' }; let newObj = Object.create(obj); newObj.ownProp = 'world'; In this example, newObj has its own property called ownProp, and an inherited property called inheritedProp. See how Object.keys only iterates through the object’s own enumerable properties:
Object.keys(newObj).forEach(key => { console.log(key); }); // output ownProp and for...in iterates over all enumerable properties, including those found in the prototype chain:
for (let key in newObj) { console.log(key); } // output ownProp inheritedProp for...in?Because for...in iterates over all enumerable properties, it is distinguished from the previous three methods. Therefore, you should use this method when you’re interested in iterating over all enumerable properties (and corresponding values) of an object (not just the object’s own properties).
Finally, you can use Object.getOwnPropertyNames to get an array of all of an object’s own property names, including those of non-enumerable properties. So this is similar to Object.keys, except it includes non-enumerable properties as well.
Let’s use an example of an object with inheritance, and we’ll explicitly define properties that are not enumerable:
let obj = { inheritedProp: 'hello' }; let newObj = Object.create(obj, { 'ownProp': { value: 'own property', enumerable: true }, 'nonEnumerableProp': { value: 'not enumerable', enumerable: false } }); Notice we have an inherited property, and two own properties—one enumerable, and one non-enumerable. If we inspect the object we see this:
{ ownProp: 'own property' } Now, when we use Object.getOwnPropertyNames we’ll get all of the object’s own properties, excluding any inherited properties:
Object.getOwnPropertyNames(newObj) // => [ 'ownProp', 'nonEnumerableProp' ] And to iterate, just like any Array, we can use forEach:
Object.getOwnPropertyNames(newObj).forEach(name => { console.log(name); }); or for...of:
for (let name of Object.getOwnPropertyNames(newObj)) { console.log(name); } Object.getOwnPropertyNames?This method is distinguished by the fact that it includes non-enumerable properties, so it should be used when this feature is desired.

In past versions of Windows, uninstalling programs was a little bit tricky. Fortunately once you’ve upgraded to Windows 10, most applications can be uninstalled easily with a few clicks.
This guide demonstrates multiple ways to iterate over a JavaScript object’s properties and values. There are many ways to do this, and each method is slightly nuanced, so for each method we’ll provide a detailed explanation, examples, and a description of when it should be used.
The first method we’ll cover is Object.entries. This method returns an array of an object’s string key-value pairs. There are a few interesting ways to use Object.entries.
forEachUsing the forEach method, we can access each entry individually. Notice that we are destructuring entry, and entry[0] is the key while entry[1] is the corresponding value.
const obj = { 'key1': 'value1', 'key2': 'value2' } Object.entries(obj).forEach(entry => { let [key, value] = entry; console.log(key, value); }) // output key1 value1 key2 value2 for...ofWe can use a slightly nicer syntax to achieve a similar outcome. Using for…of we can destructure each entry in the loop definition.
const obj = { 'key1': 'value1', 'key2': 'value2' } for (let [key, value] of Object.entries(obj)) { console.log(key, value); } // output key1 value1 key2 value2 Object.entries?As you can see from the examples above, the most valuable feature of Object.entries is that you have access to both the key and the value. So this is a desirable method to use when you know you’re going to operate on the object’s properties (keys) and the corresponding values.
Object.entriesThe main thing to consider when using Object.entries is that it will not return properties in the prototype chain. See the following example:
const someObj = { someProp: 123 }; let newObj = Object.create(someObj); newObj.newProp = 456; console.log(newObj.someProp); // => 123 console.log(newObj.newProp); // => 456 // Notice that `someProp` is missing here console.log(Object.entries(newObj)); // => [ [ 'newProp', 456 ] ] Now, this is probably what we want in most cases, but it’s something to be aware of.
Object.keys returns an array of an object’s enumerable property names.
Enumerable properties are properties set “via simple assignment or via a property initializer”. Since JavaScript objects have a lot of additional properties (e.g. constructor, __proto__), we don’t want to include these types of properties when operating on our object. They can be accessed directly, of course, but won’t be included when iterating over properties.
The usage is simple, see the following example:
const obj = { name: 'Levi Coffin', birthdate: '10/28/1798', city: 'Newport', state: 'Indiana' }; Object.keys(obj) // => [ 'name', 'birthdate', 'city', 'state' ] To iterate through the object’s properties, we can use forEach:
Object.keys(obj).forEach(key => { console.log(key); }); Or for...of:
for (let key of Object.keys(obj)) { console.log(key); } And to get the corresponding value, we can use the key for reference. Although, at this point, you ought to use Object.entries from the previous step:
for (let key of Object.keys(obj)) { let value = obj[key]; console.log(key, value); } Object.keys?As the method name implies, you should use Object.keys when you’re only interested in the keys (property names) of an object. If you’re also interested in the values, Object.entries is probably the right tool.
Object.keys is especially useful when we’re using an object to map data. Consider the following object:
const nameAgeMap = { 'Tom': 30, 'Susan': 28, 'Rob': 35, 'Claire': 22 }; Object.keys gives us access to an array of names.
Object.keys(nameAgeMap) // => [ 'Tom', 'Susan', 'Rob', 'Claire' ]Object.values is the counterpart to Object.keys, and returns an array of the object’s enumerable property values. We covered enumerable properties in the previous step, and this method simply returns the corresponding value for each enumerable property.
Similarly, we can iterate using forEach:
Object.values(obj).forEach(value => { console.log(value); }); Or for...of:
for (let value of Object.values(obj)) { console.log(value); } Object.values?Again, like its counterpart, you should use Object.values when you’re only interested in the object’s values.
Using the same map from the previous step:
const nameAgeMap = { 'Tom': 30, 'Susan': 28, 'Rob': 35, 'Claire': 22 }; We can get the corresponding list of values easily:
Object.values(nameAgeMap) // => [ 30, 28, 35, 22 ]for…in is similar to Object.keys except it iterates over all of an object’s enumerable properties (excluding Symbols).
In the following example, we’ll create an object newObj from an existing object obj.
let obj = { inheritedProp: 'hello' }; let newObj = Object.create(obj); newObj.ownProp = 'world'; In this example, newObj has its own property called ownProp, and an inherited property called inheritedProp. See how Object.keys only iterates through the object’s own enumerable properties:
Object.keys(newObj).forEach(key => { console.log(key); }); // output ownProp and for...in iterates over all enumerable properties, including those found in the prototype chain:
for (let key in newObj) { console.log(key); } // output ownProp inheritedProp for...in?Because for...in iterates over all enumerable properties, it is distinguished from the previous three methods. Therefore, you should use this method when you’re interested in iterating over all enumerable properties (and corresponding values) of an object (not just the object’s own properties).
Finally, you can use Object.getOwnPropertyNames to get an array of all of an object’s own property names, including those of non-enumerable properties. So this is similar to Object.keys, except it includes non-enumerable properties as well.
Let’s use an example of an object with inheritance, and we’ll explicitly define properties that are not enumerable:
let obj = { inheritedProp: 'hello' }; let newObj = Object.create(obj, { 'ownProp': { value: 'own property', enumerable: true }, 'nonEnumerableProp': { value: 'not enumerable', enumerable: false } }); Notice we have an inherited property, and two own properties—one enumerable, and one non-enumerable. If we inspect the object we see this:
{ ownProp: 'own property' } Now, when we use Object.getOwnPropertyNames we’ll get all of the object’s own properties, excluding any inherited properties:
Object.getOwnPropertyNames(newObj) // => [ 'ownProp', 'nonEnumerableProp' ] And to iterate, just like any Array, we can use forEach:
Object.getOwnPropertyNames(newObj).forEach(name => { console.log(name); }); or for...of:
for (let name of Object.getOwnPropertyNames(newObj)) { console.log(name); } Object.getOwnPropertyNames?This method is distinguished by the fact that it includes non-enumerable properties, so it should be used when this feature is desired.

In past versions of Windows, uninstalling programs was a little bit tricky. Fortunately once you’ve upgraded to Windows 10, most applications can be uninstalled easily with a few clicks.
This guide demonstrates multiple ways to iterate over a JavaScript object’s properties and values. There are many ways to do this, and each method is slightly nuanced, so for each method we’ll provide a detailed explanation, examples, and a description of when it should be used.
The first method we’ll cover is Object.entries. This method returns an array of an object’s string key-value pairs. There are a few interesting ways to use Object.entries.
forEachUsing the forEach method, we can access each entry individually. Notice that we are destructuring entry, and entry[0] is the key while entry[1] is the corresponding value.
const obj = { 'key1': 'value1', 'key2': 'value2' } Object.entries(obj).forEach(entry => { let [key, value] = entry; console.log(key, value); }) // output key1 value1 key2 value2 for...ofWe can use a slightly nicer syntax to achieve a similar outcome. Using for…of we can destructure each entry in the loop definition.
const obj = { 'key1': 'value1', 'key2': 'value2' } for (let [key, value] of Object.entries(obj)) { console.log(key, value); } // output key1 value1 key2 value2 Object.entries?As you can see from the examples above, the most valuable feature of Object.entries is that you have access to both the key and the value. So this is a desirable method to use when you know you’re going to operate on the object’s properties (keys) and the corresponding values.
Object.entriesThe main thing to consider when using Object.entries is that it will not return properties in the prototype chain. See the following example:
const someObj = { someProp: 123 }; let newObj = Object.create(someObj); newObj.newProp = 456; console.log(newObj.someProp); // => 123 console.log(newObj.newProp); // => 456 // Notice that `someProp` is missing here console.log(Object.entries(newObj)); // => [ [ 'newProp', 456 ] ] Now, this is probably what we want in most cases, but it’s something to be aware of.
Object.keys returns an array of an object’s enumerable property names.
Enumerable properties are properties set “via simple assignment or via a property initializer”. Since JavaScript objects have a lot of additional properties (e.g. constructor, __proto__), we don’t want to include these types of properties when operating on our object. They can be accessed directly, of course, but won’t be included when iterating over properties.
The usage is simple, see the following example:
const obj = { name: 'Levi Coffin', birthdate: '10/28/1798', city: 'Newport', state: 'Indiana' }; Object.keys(obj) // => [ 'name', 'birthdate', 'city', 'state' ] To iterate through the object’s properties, we can use forEach:
Object.keys(obj).forEach(key => { console.log(key); }); Or for...of:
for (let key of Object.keys(obj)) { console.log(key); } And to get the corresponding value, we can use the key for reference. Although, at this point, you ought to use Object.entries from the previous step:
for (let key of Object.keys(obj)) { let value = obj[key]; console.log(key, value); } Object.keys?As the method name implies, you should use Object.keys when you’re only interested in the keys (property names) of an object. If you’re also interested in the values, Object.entries is probably the right tool.
Object.keys is especially useful when we’re using an object to map data. Consider the following object:
const nameAgeMap = { 'Tom': 30, 'Susan': 28, 'Rob': 35, 'Claire': 22 }; Object.keys gives us access to an array of names.
Object.keys(nameAgeMap) // => [ 'Tom', 'Susan', 'Rob', 'Claire' ]Object.values is the counterpart to Object.keys, and returns an array of the object’s enumerable property values. We covered enumerable properties in the previous step, and this method simply returns the corresponding value for each enumerable property.
Similarly, we can iterate using forEach:
Object.values(obj).forEach(value => { console.log(value); }); Or for...of:
for (let value of Object.values(obj)) { console.log(value); } Object.values?Again, like its counterpart, you should use Object.values when you’re only interested in the object’s values.
Using the same map from the previous step:
const nameAgeMap = { 'Tom': 30, 'Susan': 28, 'Rob': 35, 'Claire': 22 }; We can get the corresponding list of values easily:
Object.values(nameAgeMap) // => [ 30, 28, 35, 22 ]for…in is similar to Object.keys except it iterates over all of an object’s enumerable properties (excluding Symbols).
In the following example, we’ll create an object newObj from an existing object obj.
let obj = { inheritedProp: 'hello' }; let newObj = Object.create(obj); newObj.ownProp = 'world'; In this example, newObj has its own property called ownProp, and an inherited property called inheritedProp. See how Object.keys only iterates through the object’s own enumerable properties:
Object.keys(newObj).forEach(key => { console.log(key); }); // output ownProp and for...in iterates over all enumerable properties, including those found in the prototype chain:
for (let key in newObj) { console.log(key); } // output ownProp inheritedProp for...in?Because for...in iterates over all enumerable properties, it is distinguished from the previous three methods. Therefore, you should use this method when you’re interested in iterating over all enumerable properties (and corresponding values) of an object (not just the object’s own properties).
Finally, you can use Object.getOwnPropertyNames to get an array of all of an object’s own property names, including those of non-enumerable properties. So this is similar to Object.keys, except it includes non-enumerable properties as well.
Let’s use an example of an object with inheritance, and we’ll explicitly define properties that are not enumerable:
let obj = { inheritedProp: 'hello' }; let newObj = Object.create(obj, { 'ownProp': { value: 'own property', enumerable: true }, 'nonEnumerableProp': { value: 'not enumerable', enumerable: false } }); Notice we have an inherited property, and two own properties—one enumerable, and one non-enumerable. If we inspect the object we see this:
{ ownProp: 'own property' } Now, when we use Object.getOwnPropertyNames we’ll get all of the object’s own properties, excluding any inherited properties:
Object.getOwnPropertyNames(newObj) // => [ 'ownProp', 'nonEnumerableProp' ] And to iterate, just like any Array, we can use forEach:
Object.getOwnPropertyNames(newObj).forEach(name => { console.log(name); }); or for...of:
for (let name of Object.getOwnPropertyNames(newObj)) { console.log(name); } Object.getOwnPropertyNames?This method is distinguished by the fact that it includes non-enumerable properties, so it should be used when this feature is desired.

In past versions of Windows, uninstalling programs was a little bit tricky. Fortunately once you’ve upgraded to Windows 10, most applications can be uninstalled easily with a few clicks.
This guide demonstrates multiple ways to iterate over a JavaScript object’s properties and values. There are many ways to do this, and each method is slightly nuanced, so for each method we’ll provide a detailed explanation, examples, and a description of when it should be used.
The first method we’ll cover is Object.entries. This method returns an array of an object’s string key-value pairs. There are a few interesting ways to use Object.entries.
forEachUsing the forEach method, we can access each entry individually. Notice that we are destructuring entry, and entry[0] is the key while entry[1] is the corresponding value.
const obj = { 'key1': 'value1', 'key2': 'value2' } Object.entries(obj).forEach(entry => { let [key, value] = entry; console.log(key, value); }) // output key1 value1 key2 value2 for...ofWe can use a slightly nicer syntax to achieve a similar outcome. Using for…of we can destructure each entry in the loop definition.
const obj = { 'key1': 'value1', 'key2': 'value2' } for (let [key, value] of Object.entries(obj)) { console.log(key, value); } // output key1 value1 key2 value2 Object.entries?As you can see from the examples above, the most valuable feature of Object.entries is that you have access to both the key and the value. So this is a desirable method to use when you know you’re going to operate on the object’s properties (keys) and the corresponding values.
Object.entriesThe main thing to consider when using Object.entries is that it will not return properties in the prototype chain. See the following example:
const someObj = { someProp: 123 }; let newObj = Object.create(someObj); newObj.newProp = 456; console.log(newObj.someProp); // => 123 console.log(newObj.newProp); // => 456 // Notice that `someProp` is missing here console.log(Object.entries(newObj)); // => [ [ 'newProp', 456 ] ] Now, this is probably what we want in most cases, but it’s something to be aware of.
The first method we’ll cover is Object.entries. This method returns an array of an object’s string key-value pairs. There are a few interesting ways to use Object.entries.
forEachUsing the forEach method, we can access each entry individually. Notice that we are destructuring entry, and entry[0] is the key while entry[1] is the corresponding value.
const obj = { 'key1': 'value1', 'key2': 'value2' } Object.entries(obj).forEach(entry => { let [key, value] = entry; console.log(key, value); }) // output key1 value1 key2 value2 for...ofWe can use a slightly nicer syntax to achieve a similar outcome. Using for…of we can destructure each entry in the loop definition.
const obj = { 'key1': 'value1', 'key2': 'value2' } for (let [key, value] of Object.entries(obj)) { console.log(key, value); } // output key1 value1 key2 value2 Object.entries?As you can see from the examples above, the most valuable feature of Object.entries is that you have access to both the key and the value. So this is a desirable method to use when you know you’re going to operate on the object’s properties (keys) and the corresponding values.
Object.entriesThe main thing to consider when using Object.entries is that it will not return properties in the prototype chain. See the following example:
const someObj = { someProp: 123 }; let newObj = Object.create(someObj); newObj.newProp = 456; console.log(newObj.someProp); // => 123 console.log(newObj.newProp); // => 456 // Notice that `someProp` is missing here console.log(Object.entries(newObj)); // => [ [ 'newProp', 456 ] ] Now, this is probably what we want in most cases, but it’s something to be aware of.
Object.keys returns an array of an object’s enumerable property names.
Enumerable properties are properties set “via simple assignment or via a property initializer”. Since JavaScript objects have a lot of additional properties (e.g. constructor, __proto__), we don’t want to include these types of properties when operating on our object. They can be accessed directly, of course, but won’t be included when iterating over properties.
The usage is simple, see the following example:
const obj = { name: 'Levi Coffin', birthdate: '10/28/1798', city: 'Newport', state: 'Indiana' }; Object.keys(obj) // => [ 'name', 'birthdate', 'city', 'state' ] To iterate through the object’s properties, we can use forEach:
Object.keys(obj).forEach(key => { console.log(key); }); Or for...of:
for (let key of Object.keys(obj)) { console.log(key); } And to get the corresponding value, we can use the key for reference. Although, at this point, you ought to use Object.entries from the previous step:
for (let key of Object.keys(obj)) { let value = obj[key]; console.log(key, value); } Object.keys?As the method name implies, you should use Object.keys when you’re only interested in the keys (property names) of an object. If you’re also interested in the values, Object.entries is probably the right tool.
Object.keys is especially useful when we’re using an object to map data. Consider the following object:
const nameAgeMap = { 'Tom': 30, 'Susan': 28, 'Rob': 35, 'Claire': 22 }; Object.keys gives us access to an array of names.
Object.keys(nameAgeMap) // => [ 'Tom', 'Susan', 'Rob', 'Claire' ]Object.keys returns an array of an object’s enumerable property names.
Enumerable properties are properties set “via simple assignment or via a property initializer”. Since JavaScript objects have a lot of additional properties (e.g. constructor, __proto__), we don’t want to include these types of properties when operating on our object. They can be accessed directly, of course, but won’t be included when iterating over properties.
The usage is simple, see the following example:
const obj = { name: 'Levi Coffin', birthdate: '10/28/1798', city: 'Newport', state: 'Indiana' }; Object.keys(obj) // => [ 'name', 'birthdate', 'city', 'state' ] To iterate through the object’s properties, we can use forEach:
Object.keys(obj).forEach(key => { console.log(key); }); Or for...of:
for (let key of Object.keys(obj)) { console.log(key); } And to get the corresponding value, we can use the key for reference. Although, at this point, you ought to use Object.entries from the previous step:
for (let key of Object.keys(obj)) { let value = obj[key]; console.log(key, value); } Object.keys?As the method name implies, you should use Object.keys when you’re only interested in the keys (property names) of an object. If you’re also interested in the values, Object.entries is probably the right tool.
Object.keys is especially useful when we’re using an object to map data. Consider the following object:
const nameAgeMap = { 'Tom': 30, 'Susan': 28, 'Rob': 35, 'Claire': 22 }; Object.keys gives us access to an array of names.
Object.keys(nameAgeMap) // => [ 'Tom', 'Susan', 'Rob', 'Claire' ]Object.values is the counterpart to Object.keys, and returns an array of the object’s enumerable property values. We covered enumerable properties in the previous step, and this method simply returns the corresponding value for each enumerable property.
Similarly, we can iterate using forEach:
Object.values(obj).forEach(value => { console.log(value); }); Or for...of:
for (let value of Object.values(obj)) { console.log(value); } Object.values?Again, like its counterpart, you should use Object.values when you’re only interested in the object’s values.
Using the same map from the previous step:
const nameAgeMap = { 'Tom': 30, 'Susan': 28, 'Rob': 35, 'Claire': 22 }; We can get the corresponding list of values easily:
Object.values(nameAgeMap) // => [ 30, 28, 35, 22 ]Object.values is the counterpart to Object.keys, and returns an array of the object’s enumerable property values. We covered enumerable properties in the previous step, and this method simply returns the corresponding value for each enumerable property.
Similarly, we can iterate using forEach:
Object.values(obj).forEach(value => { console.log(value); }); Or for...of:
for (let value of Object.values(obj)) { console.log(value); } Object.values?Again, like its counterpart, you should use Object.values when you’re only interested in the object’s values.
Using the same map from the previous step:
const nameAgeMap = { 'Tom': 30, 'Susan': 28, 'Rob': 35, 'Claire': 22 }; We can get the corresponding list of values easily:
Object.values(nameAgeMap) // => [ 30, 28, 35, 22 ]for…in is similar to Object.keys except it iterates over all of an object’s enumerable properties (excluding Symbols).
In the following example, we’ll create an object newObj from an existing object obj.
let obj = { inheritedProp: 'hello' }; let newObj = Object.create(obj); newObj.ownProp = 'world'; In this example, newObj has its own property called ownProp, and an inherited property called inheritedProp. See how Object.keys only iterates through the object’s own enumerable properties:
Object.keys(newObj).forEach(key => { console.log(key); }); // output ownProp and for...in iterates over all enumerable properties, including those found in the prototype chain:
for (let key in newObj) { console.log(key); } // output ownProp inheritedProp for...in?Because for...in iterates over all enumerable properties, it is distinguished from the previous three methods. Therefore, you should use this method when you’re interested in iterating over all enumerable properties (and corresponding values) of an object (not just the object’s own properties).
for…in is similar to Object.keys except it iterates over all of an object’s enumerable properties (excluding Symbols).
In the following example, we’ll create an object newObj from an existing object obj.
let obj = { inheritedProp: 'hello' }; let newObj = Object.create(obj); newObj.ownProp = 'world'; In this example, newObj has its own property called ownProp, and an inherited property called inheritedProp. See how Object.keys only iterates through the object’s own enumerable properties:
Object.keys(newObj).forEach(key => { console.log(key); }); // output ownProp and for...in iterates over all enumerable properties, including those found in the prototype chain:
for (let key in newObj) { console.log(key); } // output ownProp inheritedProp for...in?Because for...in iterates over all enumerable properties, it is distinguished from the previous three methods. Therefore, you should use this method when you’re interested in iterating over all enumerable properties (and corresponding values) of an object (not just the object’s own properties).
Finally, you can use Object.getOwnPropertyNames to get an array of all of an object’s own property names, including those of non-enumerable properties. So this is similar to Object.keys, except it includes non-enumerable properties as well.
Let’s use an example of an object with inheritance, and we’ll explicitly define properties that are not enumerable:
let obj = { inheritedProp: 'hello' }; let newObj = Object.create(obj, { 'ownProp': { value: 'own property', enumerable: true }, 'nonEnumerableProp': { value: 'not enumerable', enumerable: false } }); Notice we have an inherited property, and two own properties—one enumerable, and one non-enumerable. If we inspect the object we see this:
{ ownProp: 'own property' } Now, when we use Object.getOwnPropertyNames we’ll get all of the object’s own properties, excluding any inherited properties:
Object.getOwnPropertyNames(newObj) // => [ 'ownProp', 'nonEnumerableProp' ] And to iterate, just like any Array, we can use forEach:
Object.getOwnPropertyNames(newObj).forEach(name => { console.log(name); }); or for...of:
for (let name of Object.getOwnPropertyNames(newObj)) { console.log(name); } Object.getOwnPropertyNames?This method is distinguished by the fact that it includes non-enumerable properties, so it should be used when this feature is desired.
Finally, you can use Object.getOwnPropertyNames to get an array of all of an object’s own property names, including those of non-enumerable properties. So this is similar to Object.keys, except it includes non-enumerable properties as well.
Let’s use an example of an object with inheritance, and we’ll explicitly define properties that are not enumerable:
let obj = { inheritedProp: 'hello' }; let newObj = Object.create(obj, { 'ownProp': { value: 'own property', enumerable: true }, 'nonEnumerableProp': { value: 'not enumerable', enumerable: false } }); Notice we have an inherited property, and two own properties—one enumerable, and one non-enumerable. If we inspect the object we see this:
{ ownProp: 'own property' } Now, when we use Object.getOwnPropertyNames we’ll get all of the object’s own properties, excluding any inherited properties:
Object.getOwnPropertyNames(newObj) // => [ 'ownProp', 'nonEnumerableProp' ] And to iterate, just like any Array, we can use forEach:
Object.getOwnPropertyNames(newObj).forEach(name => { console.log(name); }); or for...of:
for (let name of Object.getOwnPropertyNames(newObj)) { console.log(name); } Object.getOwnPropertyNames?This method is distinguished by the fact that it includes non-enumerable properties, so it should be used when this feature is desired.

In past versions of Windows, uninstalling programs was a little bit tricky. Fortunately once you’ve upgraded to Windows 10, most applications can be uninstalled easily with a few clicks.

In past versions of Windows, uninstalling programs was a little bit tricky. Fortunately once you’ve upgraded to Windows 10, most applications can be uninstalled easily with a few clicks.




Follow @howchoo and learn cool things:
Are you a passionate writer? We’re hiring!
Write for HowchooLike what we do?
DonateWant to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.
At howchoo, our code is on private Github repos. We’ve recently started using pull requests to submit new changes to the code base. Likewise, we’ve been using Github issues for a while to keep track of bug fixes and small tasks. Our workflow has been improved significantly due to a few hidden gems in Github. In this guide, I’ll show how to make pull requests as well as a few other workflow tips.

When viewing a repository in your Github account, you should see an icon with the words “Pull requests”. Fitting, right? Click on that link to go to the pull request page.

The pull requests page will show you existing, open pull requests. You’ll find a button at the top that says “New pull request”. Click that one.

At this point you’ll choose your branches, on the left the branch you’re merging into and on the right the branch you’re merging from. At this point, it’s assumed that you’ve pushed your branch to origin. The branch you’re merging into is often master or depending on your branching model it could be called develop. When this pull request is closed, the compare branch will be merged into the base branch.

Once you’ve selected your branches, click “Create pull request”. This won’t create it but will give you the chance to leave a comment. It’s a good idea to leave a descriptive comment about what changes will be merged. It is assumed that another developer will be reviewing these changes so comments are helpful. At this point, you can scroll down to see a diff of the files changed. This is a good time to do a final review of your code to make sure it’s ready to be merged. Now click “Create pull request” again to actually create the request.
Pull requests are a great way to review code. Once you’ve created the pull request you can send the url to someone else in the organization. They will be able to see the diff, leave comments, and eventually close and merge the pull request if everything looks good.
Wouldn’t it be cool if Github would automatically close issues with a pull request? Well, they do! Before submitting the pull request, you should use the following language in a commit message:
Fixes #167
where 167 is the issue number this branch should close. By typing this in the commit message, issue number 167 will automatically be closed when the branch is merged into master.
There are a number of different phrases you can write in the commit message to force the issue to be closed. A full list can be found here – Closing issues via commit messages.

Earlier this week, GitHub announced the launch of a new cloud-hosted IDE known as GitHub Codespaces. This new service is a full development environment based on Microsoft’s Visual Studio Code.
At howchoo, our code is on private Github repos. We’ve recently started using pull requests to submit new changes to the code base. Likewise, we’ve been using Github issues for a while to keep track of bug fixes and small tasks. Our workflow has been improved significantly due to a few hidden gems in Github. In this guide, I’ll show how to make pull requests as well as a few other workflow tips.

When viewing a repository in your Github account, you should see an icon with the words “Pull requests”. Fitting, right? Click on that link to go to the pull request page.

The pull requests page will show you existing, open pull requests. You’ll find a button at the top that says “New pull request”. Click that one.

At this point you’ll choose your branches, on the left the branch you’re merging into and on the right the branch you’re merging from. At this point, it’s assumed that you’ve pushed your branch to origin. The branch you’re merging into is often master or depending on your branching model it could be called develop. When this pull request is closed, the compare branch will be merged into the base branch.

Once you’ve selected your branches, click “Create pull request”. This won’t create it but will give you the chance to leave a comment. It’s a good idea to leave a descriptive comment about what changes will be merged. It is assumed that another developer will be reviewing these changes so comments are helpful. At this point, you can scroll down to see a diff of the files changed. This is a good time to do a final review of your code to make sure it’s ready to be merged. Now click “Create pull request” again to actually create the request.
Pull requests are a great way to review code. Once you’ve created the pull request you can send the url to someone else in the organization. They will be able to see the diff, leave comments, and eventually close and merge the pull request if everything looks good.
Wouldn’t it be cool if Github would automatically close issues with a pull request? Well, they do! Before submitting the pull request, you should use the following language in a commit message:
Fixes #167
where 167 is the issue number this branch should close. By typing this in the commit message, issue number 167 will automatically be closed when the branch is merged into master.
There are a number of different phrases you can write in the commit message to force the issue to be closed. A full list can be found here – Closing issues via commit messages.

Earlier this week, GitHub announced the launch of a new cloud-hosted IDE known as GitHub Codespaces. This new service is a full development environment based on Microsoft’s Visual Studio Code.
At howchoo, our code is on private Github repos. We’ve recently started using pull requests to submit new changes to the code base. Likewise, we’ve been using Github issues for a while to keep track of bug fixes and small tasks. Our workflow has been improved significantly due to a few hidden gems in Github. In this guide, I’ll show how to make pull requests as well as a few other workflow tips.

When viewing a repository in your Github account, you should see an icon with the words “Pull requests”. Fitting, right? Click on that link to go to the pull request page.

The pull requests page will show you existing, open pull requests. You’ll find a button at the top that says “New pull request”. Click that one.

At this point you’ll choose your branches, on the left the branch you’re merging into and on the right the branch you’re merging from. At this point, it’s assumed that you’ve pushed your branch to origin. The branch you’re merging into is often master or depending on your branching model it could be called develop. When this pull request is closed, the compare branch will be merged into the base branch.

Once you’ve selected your branches, click “Create pull request”. This won’t create it but will give you the chance to leave a comment. It’s a good idea to leave a descriptive comment about what changes will be merged. It is assumed that another developer will be reviewing these changes so comments are helpful. At this point, you can scroll down to see a diff of the files changed. This is a good time to do a final review of your code to make sure it’s ready to be merged. Now click “Create pull request” again to actually create the request.
Pull requests are a great way to review code. Once you’ve created the pull request you can send the url to someone else in the organization. They will be able to see the diff, leave comments, and eventually close and merge the pull request if everything looks good.
Wouldn’t it be cool if Github would automatically close issues with a pull request? Well, they do! Before submitting the pull request, you should use the following language in a commit message:
Fixes #167
where 167 is the issue number this branch should close. By typing this in the commit message, issue number 167 will automatically be closed when the branch is merged into master.
There are a number of different phrases you can write in the commit message to force the issue to be closed. A full list can be found here – Closing issues via commit messages.

Earlier this week, GitHub announced the launch of a new cloud-hosted IDE known as GitHub Codespaces. This new service is a full development environment based on Microsoft’s Visual Studio Code.
At howchoo, our code is on private Github repos. We’ve recently started using pull requests to submit new changes to the code base. Likewise, we’ve been using Github issues for a while to keep track of bug fixes and small tasks. Our workflow has been improved significantly due to a few hidden gems in Github. In this guide, I’ll show how to make pull requests as well as a few other workflow tips.

When viewing a repository in your Github account, you should see an icon with the words “Pull requests”. Fitting, right? Click on that link to go to the pull request page.

When viewing a repository in your Github account, you should see an icon with the words “Pull requests”. Fitting, right? Click on that link to go to the pull request page.

The pull requests page will show you existing, open pull requests. You’ll find a button at the top that says “New pull request”. Click that one.

The pull requests page will show you existing, open pull requests. You’ll find a button at the top that says “New pull request”. Click that one.

At this point you’ll choose your branches, on the left the branch you’re merging into and on the right the branch you’re merging from. At this point, it’s assumed that you’ve pushed your branch to origin. The branch you’re merging into is often master or depending on your branching model it could be called develop. When this pull request is closed, the compare branch will be merged into the base branch.

At this point you’ll choose your branches, on the left the branch you’re merging into and on the right the branch you’re merging from. At this point, it’s assumed that you’ve pushed your branch to origin. The branch you’re merging into is often master or depending on your branching model it could be called develop. When this pull request is closed, the compare branch will be merged into the base branch.

Once you’ve selected your branches, click “Create pull request”. This won’t create it but will give you the chance to leave a comment. It’s a good idea to leave a descriptive comment about what changes will be merged. It is assumed that another developer will be reviewing these changes so comments are helpful. At this point, you can scroll down to see a diff of the files changed. This is a good time to do a final review of your code to make sure it’s ready to be merged. Now click “Create pull request” again to actually create the request.

Once you’ve selected your branches, click “Create pull request”. This won’t create it but will give you the chance to leave a comment. It’s a good idea to leave a descriptive comment about what changes will be merged. It is assumed that another developer will be reviewing these changes so comments are helpful. At this point, you can scroll down to see a diff of the files changed. This is a good time to do a final review of your code to make sure it’s ready to be merged. Now click “Create pull request” again to actually create the request.
Pull requests are a great way to review code. Once you’ve created the pull request you can send the url to someone else in the organization. They will be able to see the diff, leave comments, and eventually close and merge the pull request if everything looks good.
Pull requests are a great way to review code. Once you’ve created the pull request you can send the url to someone else in the organization. They will be able to see the diff, leave comments, and eventually close and merge the pull request if everything looks good.
Wouldn’t it be cool if Github would automatically close issues with a pull request? Well, they do! Before submitting the pull request, you should use the following language in a commit message:
Fixes #167
where 167 is the issue number this branch should close. By typing this in the commit message, issue number 167 will automatically be closed when the branch is merged into master.
There are a number of different phrases you can write in the commit message to force the issue to be closed. A full list can be found here – Closing issues via commit messages.Wouldn’t it be cool if Github would automatically close issues with a pull request? Well, they do! Before submitting the pull request, you should use the following language in a commit message:
Fixes #167
where 167 is the issue number this branch should close. By typing this in the commit message, issue number 167 will automatically be closed when the branch is merged into master.
There are a number of different phrases you can write in the commit message to force the issue to be closed. A full list can be found here – Closing issues via commit messages.

Earlier this week, GitHub announced the launch of a new cloud-hosted IDE known as GitHub Codespaces. This new service is a full development environment based on Microsoft’s Visual Studio Code.


Earlier this week, GitHub announced the launch of a new cloud-hosted IDE known as GitHub Codespaces. This new service is a full development environment based on Microsoft’s Visual Studio Code.




Follow @howchoo and learn cool things:
Are you a passionate writer? We’re hiring!
Write for HowchooLike what we do?
DonateWant to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.
I enjoy Apple’s notification center, but sometimes I get way too many notifications. This can be distracting, not to mention it takes up screen real estate for quite a while. To my knowledge, there is no way to change the duration of notifications in System Preferences, but it can be done using the defaults command.
You can open Terminal by using Finder and going to Applications > Utilities > Terminal. Or you can hit cmd + space bar and search for Terminal.
Type the following into Terminal:
defaults write com.apple.notificationcenterui bannerTime -int {duration} Substitute {duration} for your desired duration. Since I wanted to shorten the duration of the notifications dramatically I used:
defaults write com.apple.notificationcenterui bannerTime -int 1In order for this change to take effect you must log out and back in. Click on the “Apple” in the top left of the screen and click “Log out …”. Or you can type cmd + shift + Q.
If you’d like to test out the notification duration, you can run the following command in Terminal to display notifications from the command line:
osascript -e 'display notification "test notification!"'In this guide, we’re going to use AppleScript and a tool called osascript to display macOS notifications.
I enjoy Apple’s notification center, but sometimes I get way too many notifications. This can be distracting, not to mention it takes up screen real estate for quite a while. To my knowledge, there is no way to change the duration of notifications in System Preferences, but it can be done using the defaults command.
You can open Terminal by using Finder and going to Applications > Utilities > Terminal. Or you can hit cmd + space bar and search for Terminal.
Type the following into Terminal:
defaults write com.apple.notificationcenterui bannerTime -int {duration} Substitute {duration} for your desired duration. Since I wanted to shorten the duration of the notifications dramatically I used:
defaults write com.apple.notificationcenterui bannerTime -int 1In order for this change to take effect you must log out and back in. Click on the “Apple” in the top left of the screen and click “Log out …”. Or you can type cmd + shift + Q.
If you’d like to test out the notification duration, you can run the following command in Terminal to display notifications from the command line:
osascript -e 'display notification "test notification!"'In this guide, we’re going to use AppleScript and a tool called osascript to display macOS notifications.
I enjoy Apple’s notification center, but sometimes I get way too many notifications. This can be distracting, not to mention it takes up screen real estate for quite a while. To my knowledge, there is no way to change the duration of notifications in System Preferences, but it can be done using the defaults command.
You can open Terminal by using Finder and going to Applications > Utilities > Terminal. Or you can hit cmd + space bar and search for Terminal.
Type the following into Terminal:
defaults write com.apple.notificationcenterui bannerTime -int {duration} Substitute {duration} for your desired duration. Since I wanted to shorten the duration of the notifications dramatically I used:
defaults write com.apple.notificationcenterui bannerTime -int 1In order for this change to take effect you must log out and back in. Click on the “Apple” in the top left of the screen and click “Log out …”. Or you can type cmd + shift + Q.
If you’d like to test out the notification duration, you can run the following command in Terminal to display notifications from the command line:
osascript -e 'display notification "test notification!"'In this guide, we’re going to use AppleScript and a tool called osascript to display macOS notifications.
I enjoy Apple’s notification center, but sometimes I get way too many notifications. This can be distracting, not to mention it takes up screen real estate for quite a while. To my knowledge, there is no way to change the duration of notifications in System Preferences, but it can be done using the defaults command.
You can open Terminal by using Finder and going to Applications > Utilities > Terminal. Or you can hit cmd + space bar and search for Terminal.
You can open Terminal by using Finder and going to Applications > Utilities > Terminal. Or you can hit cmd + space bar and search for Terminal.
Type the following into Terminal:
defaults write com.apple.notificationcenterui bannerTime -int {duration} Substitute {duration} for your desired duration. Since I wanted to shorten the duration of the notifications dramatically I used:
defaults write com.apple.notificationcenterui bannerTime -int 1Type the following into Terminal:
defaults write com.apple.notificationcenterui bannerTime -int {duration} Substitute {duration} for your desired duration. Since I wanted to shorten the duration of the notifications dramatically I used:
defaults write com.apple.notificationcenterui bannerTime -int 1In order for this change to take effect you must log out and back in. Click on the “Apple” in the top left of the screen and click “Log out …”. Or you can type cmd + shift + Q.
In order for this change to take effect you must log out and back in. Click on the “Apple” in the top left of the screen and click “Log out …”. Or you can type cmd + shift + Q.
If you’d like to test out the notification duration, you can run the following command in Terminal to display notifications from the command line:
osascript -e 'display notification "test notification!"'If you’d like to test out the notification duration, you can run the following command in Terminal to display notifications from the command line:
osascript -e 'display notification "test notification!"'In this guide, we’re going to use AppleScript and a tool called osascript to display macOS notifications.
In this guide, we’re going to use AppleScript and a tool called osascript to display macOS notifications.




Follow @howchoo and learn cool things:
Are you a passionate writer? We’re hiring!
Write for HowchooLike what we do?
DonateWant to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.

Let’s face it—checking the weather is easier than ever. If it’s not on your phone’s lock screen, there’s probably a device nearby you could ask for local weather information. But what if there was a way to take things back to the good ol’ days, when weather data was worthy of its own full-time channel on the TV?
Maker Probnot on Reddit took this to heart with this awesome weather channel Pi project! This Raspberry Pi is programmed to recreate the old weather channel that ran in Winnepeg back in the 1990s.
| Raspberry Pi 3 | × | 1 |
Howchoo is reader-supported. As an Amazon Associate, we may earn a small affiliate commission at no cost to you when you buy through our links.
If you want to peek behind the curtains, Probnot posted the code on GitHub (and adds that this code was loosely put together—please be gentle). The script pulls current weather information from Environment Canada and formats the data into a vintage-looking display.
In the video example, the Raspberry Pi display is output to an old CRT. According to Probnot, this was accomplished with RF modulators connected to the cable in his house. The number shown in the corner is the actual UHF channel.
We really like this project and definitely see the appeal. Is it practical? In a Raspberry Pi project sort of way. Follow Probnot on Youtube and Reddit for more project updates.

Youtuber and tech maker Michael Reeves had way too much fun with this screaming Roomba project.
Follow @howchoo and learn cool things:
Are you a passionate writer? We’re hiring!
Write for HowchooLike what we do?
DonateWant to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.
This guide was written for OS X 10.9. For an updated version of this guide click here.
There are plenty of reasons you will want to encrypt files on your personal computer. There is a lot of software available that can do this for you, but I’m going to show you how to do it using tools that come preinstalled on OS X.

cmd + space bar
Hit command + space bar to open Spotlight, and search for “Disk Utility”. Once you find it, select it and hit enter.

This step will allow you to create a new disk image. Think of it like a virtual USB thumb drive. Once you create it you will be able to mount it (plug it in) and unmount (eject) it, but it will be stored as a “dmg” (disk image) file. Under “Save As” put the file name that you would like the disk image to be called. If you type “secure” the file will be called “secure.dmg”. By default the disk image will be saved in your Documents folder. You are free to change this to another directory of your choice.
Under the “Name” input, type whatever you would like the disk image to be called once its mounted. This will help you to identify it in Finder. For simplicity, I recommend calling it the same thing that you call the disk image file.

Under “Encryption” change the option from “none” to either of the options – 128 or 256-bit AES.
Once you click create you will be prompted to give and verify a password. Use this guide to learn how to create a secure password. This will effectively create your new encrypted disk image.

Just like a USB thumb drive you will need to “plug it in” before you can save files on it. To do this simply navigate to the directory where it is saved. By default it will be located in your Documents folder. Double click on the disk image file, and enter your password when prompted. Finder will open and the encrypted disk will be selected. You can start dropping files into this directory.

While the disk image is mounted anyone will have access to these files. Once you are finished adding files you will want to secure it by simply ejecting the disk image. This means that anyone who wants to mount this disk image and access the files will need to enter the password you’ve chosen. Anyone who finds the dmg file will be out of luck because the entire thing will be encrypted.
This short guide will show you how to enable php.ini on Mac OS X 10.8.X.
This guide was written for OS X 10.9. For an updated version of this guide click here.
There are plenty of reasons you will want to encrypt files on your personal computer. There is a lot of software available that can do this for you, but I’m going to show you how to do it using tools that come preinstalled on OS X.

cmd + space bar
Hit command + space bar to open Spotlight, and search for “Disk Utility”. Once you find it, select it and hit enter.

This step will allow you to create a new disk image. Think of it like a virtual USB thumb drive. Once you create it you will be able to mount it (plug it in) and unmount (eject) it, but it will be stored as a “dmg” (disk image) file. Under “Save As” put the file name that you would like the disk image to be called. If you type “secure” the file will be called “secure.dmg”. By default the disk image will be saved in your Documents folder. You are free to change this to another directory of your choice.
Under the “Name” input, type whatever you would like the disk image to be called once its mounted. This will help you to identify it in Finder. For simplicity, I recommend calling it the same thing that you call the disk image file.

Under “Encryption” change the option from “none” to either of the options – 128 or 256-bit AES.
Once you click create you will be prompted to give and verify a password. Use this guide to learn how to create a secure password. This will effectively create your new encrypted disk image.

Just like a USB thumb drive you will need to “plug it in” before you can save files on it. To do this simply navigate to the directory where it is saved. By default it will be located in your Documents folder. Double click on the disk image file, and enter your password when prompted. Finder will open and the encrypted disk will be selected. You can start dropping files into this directory.

While the disk image is mounted anyone will have access to these files. Once you are finished adding files you will want to secure it by simply ejecting the disk image. This means that anyone who wants to mount this disk image and access the files will need to enter the password you’ve chosen. Anyone who finds the dmg file will be out of luck because the entire thing will be encrypted.
This short guide will show you how to enable php.ini on Mac OS X 10.8.X.
This guide was written for OS X 10.9. For an updated version of this guide click here.
There are plenty of reasons you will want to encrypt files on your personal computer. There is a lot of software available that can do this for you, but I’m going to show you how to do it using tools that come preinstalled on OS X.

cmd + space bar
Hit command + space bar to open Spotlight, and search for “Disk Utility”. Once you find it, select it and hit enter.

This step will allow you to create a new disk image. Think of it like a virtual USB thumb drive. Once you create it you will be able to mount it (plug it in) and unmount (eject) it, but it will be stored as a “dmg” (disk image) file. Under “Save As” put the file name that you would like the disk image to be called. If you type “secure” the file will be called “secure.dmg”. By default the disk image will be saved in your Documents folder. You are free to change this to another directory of your choice.
Under the “Name” input, type whatever you would like the disk image to be called once its mounted. This will help you to identify it in Finder. For simplicity, I recommend calling it the same thing that you call the disk image file.

Under “Encryption” change the option from “none” to either of the options – 128 or 256-bit AES.
Once you click create you will be prompted to give and verify a password. Use this guide to learn how to create a secure password. This will effectively create your new encrypted disk image.

Just like a USB thumb drive you will need to “plug it in” before you can save files on it. To do this simply navigate to the directory where it is saved. By default it will be located in your Documents folder. Double click on the disk image file, and enter your password when prompted. Finder will open and the encrypted disk will be selected. You can start dropping files into this directory.

While the disk image is mounted anyone will have access to these files. Once you are finished adding files you will want to secure it by simply ejecting the disk image. This means that anyone who wants to mount this disk image and access the files will need to enter the password you’ve chosen. Anyone who finds the dmg file will be out of luck because the entire thing will be encrypted.
This short guide will show you how to enable php.ini on Mac OS X 10.8.X.
This guide was written for OS X 10.9. For an updated version of this guide click here.
There are plenty of reasons you will want to encrypt files on your personal computer. There is a lot of software available that can do this for you, but I’m going to show you how to do it using tools that come preinstalled on OS X.

cmd + space bar
Hit command + space bar to open Spotlight, and search for “Disk Utility”. Once you find it, select it and hit enter.

cmd + space bar
Hit command + space bar to open Spotlight, and search for “Disk Utility”. Once you find it, select it and hit enter.

This step will allow you to create a new disk image. Think of it like a virtual USB thumb drive. Once you create it you will be able to mount it (plug it in) and unmount (eject) it, but it will be stored as a “dmg” (disk image) file. Under “Save As” put the file name that you would like the disk image to be called. If you type “secure” the file will be called “secure.dmg”. By default the disk image will be saved in your Documents folder. You are free to change this to another directory of your choice.

This step will allow you to create a new disk image. Think of it like a virtual USB thumb drive. Once you create it you will be able to mount it (plug it in) and unmount (eject) it, but it will be stored as a “dmg” (disk image) file. Under “Save As” put the file name that you would like the disk image to be called. If you type “secure” the file will be called “secure.dmg”. By default the disk image will be saved in your Documents folder. You are free to change this to another directory of your choice.
Under the “Name” input, type whatever you would like the disk image to be called once its mounted. This will help you to identify it in Finder. For simplicity, I recommend calling it the same thing that you call the disk image file.
Under the “Name” input, type whatever you would like the disk image to be called once its mounted. This will help you to identify it in Finder. For simplicity, I recommend calling it the same thing that you call the disk image file.

Under “Encryption” change the option from “none” to either of the options – 128 or 256-bit AES.

Under “Encryption” change the option from “none” to either of the options – 128 or 256-bit AES.
Once you click create you will be prompted to give and verify a password. Use this guide to learn how to create a secure password. This will effectively create your new encrypted disk image.
Once you click create you will be prompted to give and verify a password. Use this guide to learn how to create a secure password. This will effectively create your new encrypted disk image.

Just like a USB thumb drive you will need to “plug it in” before you can save files on it. To do this simply navigate to the directory where it is saved. By default it will be located in your Documents folder. Double click on the disk image file, and enter your password when prompted. Finder will open and the encrypted disk will be selected. You can start dropping files into this directory.

Just like a USB thumb drive you will need to “plug it in” before you can save files on it. To do this simply navigate to the directory where it is saved. By default it will be located in your Documents folder. Double click on the disk image file, and enter your password when prompted. Finder will open and the encrypted disk will be selected. You can start dropping files into this directory.

While the disk image is mounted anyone will have access to these files. Once you are finished adding files you will want to secure it by simply ejecting the disk image. This means that anyone who wants to mount this disk image and access the files will need to enter the password you’ve chosen. Anyone who finds the dmg file will be out of luck because the entire thing will be encrypted.

While the disk image is mounted anyone will have access to these files. Once you are finished adding files you will want to secure it by simply ejecting the disk image. This means that anyone who wants to mount this disk image and access the files will need to enter the password you’ve chosen. Anyone who finds the dmg file will be out of luck because the entire thing will be encrypted.
This short guide will show you how to enable php.ini on Mac OS X 10.8.X.
This short guide will show you how to enable php.ini on Mac OS X 10.8.X.





Follow @howchoo and learn cool things:
Are you a passionate writer? We’re hiring!
Write for HowchooLike what we do?
DonateWant to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.
There are many reasons you might want to access your Time Warner router. For instance, you may want to change your password or set up port forwarding for a nerdy project you are working on.
| Time Warner router | × | 1 | ||
| Computer, tablet, or mobile device | × | 1 |
Howchoo is reader-supported. When you buy through links on our site, we may earn a small affiliate commission at no cost to you.
This can be a wired or wifi connection.
Or click here: http://192.168.0.1. This is the router’s gateway and it will automatically bring up a log in screen.
Username: admin Password: password Now you’re logged in!
You can change your password by click “Change Password” at the top left of the admin panel.
In many cases, a simple reset will resolve many network issues or hangups with your modem or router. There are different ways to reset your device, some of which are more intense than others.
Follow @howchoo and learn cool things:
Are you a passionate writer? We’re hiring!
Write for HowchooLike what we do?
DonateWant to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.